当前位置: 移动技术网 > IT编程>开发语言>C/C++ > 设置PNG图片DPI 信息,保存为PDF(使用Magick),与OpenCV转换

设置PNG图片DPI 信息,保存为PDF(使用Magick),与OpenCV转换

2018年12月06日  | 移动技术网IT编程  | 我要评论

节日灯,世界时间对照表,雅美绮

目录

任务描述

我有这样一个需求,读取一张格式为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. 可以参考

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类).

    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的库。

相关链接


  1. (cmake 配置magick++))

如对本文有疑问,请在下面进行留言讨论,广大热心网友会与你互动!! 点击进行留言回复

相关文章:

验证码:
移动技术网