设置PNG图片DPI 信息,保存为PDF(使用Magick),与OpenCV转换
任务描述
我有这样一个需求,读取一张格式为PNG 或者 Jpeg 的图片, 保存为可以可以直接打印的大小,要求编为一个小程序。因为通常情况下图像大小如1024*512 是像素尺寸,要想打印出来是需要设置 DPI(dots per inch),意思是每英寸上有多少个点(像素)。为了打印方便还可以保存为PDF。
解决方案
Magick++
Magick++ 是著名开源图片处理库ImageMagick提供的 C++库。在命令行可以直接使用相关 ImageMagick 的命令直接完成上述任务。要是C++编程完成需要调用 Magick++ 的API。
Ubuntu 安装magic++库很简单:
sudo apt-get install libmagick++-dev
下面给出例程
Talk is cheap, show me the code.
C++ 代码:
#include <iostream>
#include <Magick++.h>
int main(int argc, char **argv)
{
Magick::InitializeMagick(*argv);
Magick::Image image;
try{
image.read("./patternsBoard1.png"); // read an image from directory
image.resolutionUnits(Magick::PixelsPerCentimeterResolution); // 设置分辨率单位为 像素/厘米
image.density("120x120"); // 纵、横分辨率都是 120 px/cm
image.write("./patternsBoard3.pdf"); // 保存为pdf
}catch(Magick::Exception &erro_){
std::cout<< "Caught exception:" << erro_.what() <<std::endl;
return 1;
}
return 0;
}
使用 CMakeLists.txt. 可以参考 [1]
project(try_magickpp)
cmake_minimum_required(VERSION 2.8)
find_package(ImageMagick COMPONENTS Magick++)
include_directories(${ImageMagick_INCLUDE_DIRS})
aux_source_directory(. SRC_LIST)
add_executable(${PROJECT_NAME} ${SRC_LIST})
target_link_libraries(${PROJECT_NAME} ${ImageMagick_LIBRARIES})
如此,可以看到读入的图片文件保存为 pdf,并且设置的DPI,可以打印出想要的大小。
与 Opencv 配合
我们有从 Opencv 处理后的cv::Mat ,下面提供 从cv::Mat 转为 Magick::Image (Magick++ 的Image类)[2].
cv::Mat cvimage;
cvimage = cv::imread("./patternsBoard1.png" ,cv::IMREAD_GRAYSCALE);
Magick::Image image(cvimage.cols,cvimage.rows,"I",MagickCore::CharPixel, (char *)cvimage.data);
当然,如果要使用这段代码是需include OpenCV的头,并且需要在CMakeLists.txt 中指明链接OpenCV的库。
相关链接
Magick++ API:https://www.imagemagick.org/Magick++/Image++.html
Magick++ tutorial:https://www.imagemagick.org/Magick++/tutorial/Magick++_tutorial.pdf
设置PNG图片DPI 信息,保存为PDF(使用Magick),与OpenCV转换的更多相关文章
- 使用JavaScript将当前页面保存成PDF,支持图片和文字的保存
前端开发的朋友们可能会遇到这个需求:将您负责开发的网页的全部内容,包括文字和图片,一起保存成一个PDF文件.如果采用屏幕截图的话,默认Windows操作系统的截图按钮无法完整截取超过一屏幕的屏幕内容. ...
- 草台班子--Window10文件管理器默认显示图片DPI及位深信息
草台班子--Window10文件管理器默认显示图片DPI及位深信息 经常处理一些图片的DPI/PPI信息,总是需要找软件打开确认,通过Windows10文件浏览器可以默认显示图片的DPI信息 ...
- R同时保存png/pdf等格式图片
R怎么同时保存png/pdf等多种格式的图片? 如果是ggplot对象,用ggsave用两下就行,如果不是呢? png/pdf()组合dev.off()是通常保存方法,但一个组合只能保存一个图片.要想 ...
- 将matlab的figure保存为pdf,避免图片太大缺失
有时画的matlab图太大,或者有太多的子图,导致图太宽,如果直接保存成pdf的话,会导致左右边丢失,显示不下.一个有效又简单的办法是: 1.在matlab figure里面,Edit -> ...
- C# 修改PNG图片metadata信息 (含转载fancyblogs博文)
WPF中使用 metadata-extractor可以轻松获取 PNG图片metadata信息 NuGet 获取地址: PM> Install-Package MetadataExtractor ...
- Android--操作图片Exif信息
前言 在Android系统中,图片文件在内存中以像素点的二维数组加载,存放像素信息,还会在开头加上一些额外的照片拍摄参数信息,这些信息就是Exif.Android2.0之后,媒体库加入了操作图片Exi ...
- 将HTML页面自动保存为PDF文件并上传的两种方式(一)-前端(react)方式
一.业务场景 公司的样本检测报告以React页面的形式生成,已调整为A4大小的样式并已实现分页,业务上需要将这个网页生成PDF文件,并上传到服务器,后续会将这个文件发送给客户(这里不考虑). 二.原来 ...
- 爬取博主的所有文章并保存为PDF文件
继续改进上一个项目,上次我们爬取了所有文章,但是保存为TXT文件,查看不方便,而且还无法保存文章中的代码和图片. 所以这次保存为PDF文件,方便查看. 需要的工具: 1.wkhtmltopdf安装包, ...
- Android 图片Exif信息相关的获取与修改
1 Exif是什么 Exif是一种图像文件格式,它的数据存储于JPEG格式是完全相同的,实际上Exif格式就是JPEG格式头插入了 数码照片的信息,包括拍摄的光圈.快门.平衡白.ISO.焦距.日期时间 ...
随机推荐
- sys_arch interface for lwIP 2.0.3
sys_arch interface for lwIP 2.0.3 Author: Adam Dunkels Simon Goldschmidt The operating system emulat ...
- Java中的监听器
servlet的技术规范包括三个:servlet,listener,filter,今天记录一下listener的学习. 监听器就是监听某个对象的状态变化的技术.监听器包括事件源,监听器,注册监听器以及 ...
- iOS:位置相关(18-03-09更)
1.定位设置 2.定位页面逻辑 1.定位设置 2.定位页面逻辑 1).第一次进入该VC,在 viewDidLoad 调用刷新页面 refreshLocationView .这时用户还没决定,会刷出“正 ...
- Python %操作符 字符串格式化
%操作符(字符串格式化,string formatting),说明如下: %[(name)][flags][width].[precision]typecode (name)为命名 flags可以有+ ...
- oracle入门(二)
### 一,视图 ```1. 什么是视图 视图是一张虚表, 可以把视图看成表使用(增删改查),视图中没有数据,所有的数据都在基本表中(tables) 封装了一个复杂的DQL 操作视图 ...
- C++笔记014:C++对C的扩展——新增数据类型bool类型
原创笔记,转载请注明出处! 点击[关注],关注也是一种美德~ 1.C++在C语言的基本类型系统之上增加了bool类型. 2.C++中的bool类型变量可取的值只有true 和false,true代表真 ...
- 怎样在Win7系统中搭建Web服务器
一.搭建web服务 1.打开控制面板,选择并进入“程序”,双击“打开或关闭Windows服务”,在弹出的窗口中选择“Internet信息服务”下面所有的选项,点击确定后,开始更新服务. 2.更新完成后 ...
- js 刷新父页面
//刷新父页面 window.opener.location.reload();
- CALL TRANSACTION
概要 SUBMITと違い.トランザクションコードで呼び出すのが特徴. アドオンからの伝票照会やバッチインプットによるSAPへのデータ登録/更新処理にも利用される. なお.呼び出された側から呼び出し元へ ...
- python2.7入门---2.x与3.x版本区别
Python的3.0版本,常被称为Python 3000,或简称Py3k.相对于Python的早期版本,这是一个较大的升级.为了不带入过多的累赘,Python 3.0在设计的时候没有考虑向 ...