设为首页 加入收藏

TOP

设置PNG图片DPI 信息,保存为PDF(使用Magick),与OpenCV转换
2018-12-06 12:08:22 】 浏览:15
Tags:设置 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的库。

相关链接


  1. (CMake 配置Magick++)https://stackoverflow.com/questions/7902916/set-path-in-cmake-c-imagemagick)?

  2. http://blog.csdn.net/panda1234lee/article/details/71439288?


编程开发网
】【打印繁体】【投稿】【收藏】 【推荐】【举报】【评论】 【关闭】 【返回顶部
上一篇【C++并发实战】(二)线程管理 下一篇BZOJ5462: [APIO2018] 新家(K-D T..

评论

帐  号: 密码: (新用户注册)
验 证 码:
表  情:
内  容:

array(4) { ["type"]=> int(8) ["message"]=> string(24) "Undefined variable: jobs" ["file"]=> string(32) "/mnt/wp/cppentry/do/bencandy.php" ["line"]=> int(214) }