ImageMagick(1) 转换PDF文件至图像

2023-11-10 11:30
文章标签 图像 转换 pdf imagemagick

本文主要是介绍ImageMagick(1) 转换PDF文件至图像,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

OS: Win10,Linux
相关软件:
(1)cmder(WIndows使用)
(2)ghostscript(转换PDF需要调用,WIndows好像不需要,Linux通过apt install ghostscript即可)
(3)ImageMagick ,官网下载或者apt下载安装


2019-05-26更新

在Ubuntu18.04中使用convert命令转换pdf会报如下错误:

$ convert -verbose -density 300 blog.pdf demo.png
convert-im6.q16: not authorized `blog.pdf' @ error/constitute.c/ReadImage/412.
convert-im6.q16: no images defined `demo.png' @ error/convert.c/ConvertImageCommand/3258.

网址:https://github.com/ImageMagick/ImageMagick/issues/1310 最后的回答给出了解答方案:编辑文件/etc/ImageMagick-6/policy.xml第76行,修改为

<policy domain="coder" rights="read|write" pattern="PDF" />

在这里插入图片描述
本文实现使用ImageMagick中的convert命令将PDF文件转换为图像文件(png,jpg等),需要掌握的基本工具/命令有sort和convert。

convert

先介绍convert命令,详细可以参照官网,网站https://imagemagick.org/script/examples.php 列出了convert的不同例子。
命令行选项有几种不同的形式:

  • Image Setting
    在这里插入图片描述
  • Image Operator
    在这里插入图片描述
  • Image Channel Operator
    在这里插入图片描述
  • Image Sequence Operator
    在这里插入图片描述
  • Image Geometry
    在这里插入图片描述

-append:从上至下合并图像(Image Sequence Operator)
+append:从左至右合并图像(Image Sequence Operator)
-flip: 垂直翻转
-flop: 水平翻转

convert test.pdf demo.png

如果pdf文件有n页的话,前面步骤会生成n张图片,图片名称分别为demo-0.png,demo-1.png,…,demo-(n-1).png,通过默认参数得到的图像分辨率为72dpi(dots per inch),可以通过修改参数-density 实现:

convert -density 300 test.pdf demo.png

300dpi分辨率已经可以接受了。

如果想要转换pdf中的某一页或者部分页,可以执行下面命令:

convert -density 300 test.pdf[0] demo.png

test.pdf[0]表示第一页,注意变换是从0开始的。

sort

前面得到n张demo-开头的文件,如果直接通过命令

convert demo-*.png -append all.png

其顺序会无法保证,得不到想要的效果,需要先人为进行排序,Linux和Win下操作游戏不同。

Linux

建议参考该命令手册:man sort

ls *png | sort -nbr -k 1.5 |convert @- -append all.png

sort的常用参数及作用:
-n:根据数值排列顺序
-b:忽略开头空白字符
-d:只考虑空白和字母顺序
-r:反向顺序
-k POS1,POS2:
引用一段话进行解释该参数:

where POS1 is the starting field position, and POS2 is the ending
field position. Each field position, in turn, is defined as: F.C
…where F is the field number and C is the character within that
field to begin the sort comparison.

使用key参数,可以用来利用不同的field来排列,每个field以空格隔开,像前面文件名demo-0.png,这里只有一个field,我想在这个field的第6个数值字符开始为排列依据,忽略前面5个字符,那么参数就为-k 1.5,表示排列依据为第一个field第6个字符开始,多个filed的情况一般出现在文件中的数据排列,例如有一个文件data.txt,其里面的数据有:

01 Joe Sr.Designer 
02 Marie Jr.Developer 
03 Albert Jr.Designer 
04 Dave Sr.Developer

这样就可以通过参数k实现不同field(每个空格间隔的字符串为一个field)的排序

Windows

Windows环境中笔者使用的是cmder终端,其命令如下:

ls *.png | sort /+7 | convert @- -append all.png

因为在Windows中调用的是windows系统自检的sort命令,其语法在官网网址:https://docs.microsoft.com/en-us/previous-versions/windows/it-pro/windows-xp/bb491004(v=technet.10) 进行了详细介绍,/+7表示从第7个字符开始作排序比较,Linux下是第6个开始比较,这点是有差别的。

这篇关于ImageMagick(1) 转换PDF文件至图像的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/382388

相关文章

C#实现将Excel表格转换为图片(JPG/ PNG)

《C#实现将Excel表格转换为图片(JPG/PNG)》Excel表格可能会因为不同设备或字体缺失等问题,导致格式错乱或数据显示异常,转换为图片后,能确保数据的排版等保持一致,下面我们看看如何使用C... 目录通过C# 转换Excel工作表到图片通过C# 转换指定单元格区域到图片知识扩展C# 将 Excel

C++使用printf语句实现进制转换的示例代码

《C++使用printf语句实现进制转换的示例代码》在C语言中,printf函数可以直接实现部分进制转换功能,通过格式说明符(formatspecifier)快速输出不同进制的数值,下面给大家分享C+... 目录一、printf 原生支持的进制转换1. 十进制、八进制、十六进制转换2. 显示进制前缀3. 指

使用Python开发一个带EPUB转换功能的Markdown编辑器

《使用Python开发一个带EPUB转换功能的Markdown编辑器》Markdown因其简单易用和强大的格式支持,成为了写作者、开发者及内容创作者的首选格式,本文将通过Python开发一个Markd... 目录应用概览代码结构与核心组件1. 初始化与布局 (__init__)2. 工具栏 (setup_t

OpenCV图像形态学的实现

《OpenCV图像形态学的实现》本文主要介绍了OpenCV图像形态学的实现,包括腐蚀、膨胀、开运算、闭运算、梯度运算、顶帽运算和黑帽运算,文中通过示例代码介绍的非常详细,需要的朋友们下面随着小编来一起... 目录一、图像形态学简介二、腐蚀(Erosion)1. 原理2. OpenCV 实现三、膨胀China编程(

Android实现打开本地pdf文件的两种方式

《Android实现打开本地pdf文件的两种方式》在现代应用中,PDF格式因其跨平台、稳定性好、展示内容一致等特点,在Android平台上,如何高效地打开本地PDF文件,不仅关系到用户体验,也直接影响... 目录一、项目概述二、相关知识2.1 PDF文件基本概述2.2 android 文件访问与存储权限2.

Java中Date、LocalDate、LocalDateTime、LocalTime、时间戳之间的相互转换代码

《Java中Date、LocalDate、LocalDateTime、LocalTime、时间戳之间的相互转换代码》:本文主要介绍Java中日期时间转换的多种方法,包括将Date转换为LocalD... 目录一、Date转LocalDateTime二、Date转LocalDate三、LocalDateTim

Python实现AVIF图片与其他图片格式间的批量转换

《Python实现AVIF图片与其他图片格式间的批量转换》这篇文章主要为大家详细介绍了如何使用Pillow库实现AVIF与其他格式的相互转换,即将AVIF转换为常见的格式,比如JPG或PNG,需要的小... 目录环境配置1.将单个 AVIF 图片转换为 JPG 和 PNG2.批量转换目录下所有 AVIF 图

详解如何通过Python批量转换图片为PDF

《详解如何通过Python批量转换图片为PDF》:本文主要介绍如何基于Python+Tkinter开发的图片批量转PDF工具,可以支持批量添加图片,拖拽等操作,感兴趣的小伙伴可以参考一下... 目录1. 概述2. 功能亮点2.1 主要功能2.2 界面设计3. 使用指南3.1 运行环境3.2 使用步骤4. 核

使用C#代码在PDF文档中添加、删除和替换图片

《使用C#代码在PDF文档中添加、删除和替换图片》在当今数字化文档处理场景中,动态操作PDF文档中的图像已成为企业级应用开发的核心需求之一,本文将介绍如何在.NET平台使用C#代码在PDF文档中添加、... 目录引言用C#添加图片到PDF文档用C#删除PDF文档中的图片用C#替换PDF文档中的图片引言在当

详解C#如何提取PDF文档中的图片

《详解C#如何提取PDF文档中的图片》提取图片可以将这些图像资源进行单独保存,方便后续在不同的项目中使用,下面我们就来看看如何使用C#通过代码从PDF文档中提取图片吧... 当 PDF 文件中包含有价值的图片,如艺术画作、设计素材、报告图表等,提取图片可以将这些图像资源进行单独保存,方便后续在不同的项目中使