设置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.焦距.日期时间 ...
随机推荐
- Mac 下 SVN 的使用
在Windows环境中,我们一般使用TortoiseSVN来搭建svn环境.在Mac环境下,由于Mac自带了svn的服务器端和客户端功能,所以我们可以在不装任何第三方软件的前提下使用svn功能,不过还 ...
- UVA - 1160(简单建模+并查集)
A secret service developed a new kind of explosive that attain its volatile property only when a spe ...
- 网络测量中基于Sketch方法的调查
目录 LD Sketch SeqHash What's New reversible sketch Count-Sketch和Count-min sketch Diamond Sketch: Accu ...
- 处理HTML表单(11)
PHP和Web表单 <?php if(isset($_POST["name"])){//isset()函数设置变量是否设置,并且不能为空 $name = $_POST[&qu ...
- HTML小记
1.页面内跳转 当<a>元素用于页面内的锚点跳转时,应该先为该页面设置一些锚点,而定义锚点有两种办法: 通过<a>元素的name属性来定义,如:<a name=" ...
- Java Activiti 工作流引擎 springmvc SSM 流程审批 后台框架源码
1.模型管理 :web在线流程设计器.预览流程xml.导出xml.部署流程 2.流程管理 :导入导出流程资源文件.查看流程图.根据流程实例反射出流程模型.激活挂起 3.运行中流程:查看流程信息.当前任 ...
- JS知识点整理(二)
前言 这是对平时的一些读书笔记和理解进行整理的第二部分,第一部分请前往:JS知识点整理(一).本文包含一些易混淆.遗漏的知识点,也会配上一些例子,也许不是很完整,也许还会有点杂,但也许会有你需要的,后 ...
- 【Linux】进程管理
进程是什么? 程序 保存在硬盘.光盘等介质中的可执行代码和数据 是静态保存的代码 进程 在CPU及内存中运行的动态执行的程序代码 进程是程序运行的实例 同一个程序可能对应多个进程 子进程和父进 ...
- C++学习---指针相关
1.指向 “指针对象” 的 ”指针” 一般指针 int *p1,ival =42; p1 = &ival; 或者 int ival =42,*p1=&val; 代表一个指针对象指向一个 ...
- PHP中的递增/递减运算符
看这段代码 <?php $a=10; $b=++$a; //此语句等同于 ; $a=$a+1 ; $b=$a echo $a."<br>"; echo $b; ? ...