convert
将PDF转换为图像(JPEG或PNG)。这是我要转换的PDF之一。 我希望程序修剪掉多余的空白并返回足够高质量的图像,以便可以轻松读取上标。
这是我目前的最佳尝试。如您所见,修整效果很好,我只需要稍微提高一下分辨率即可。这是我正在使用的命令:
convert -trim 24.pdf -resize 500% -quality 100 -sharpen 0x1.0 24-11.jpg
我试图做出以下有意识的决定:
调整大小它更大(对分辨率没有影响)
使质量尽可能高
使用
-sharpen
(我尝试了一系列值)关于任何建议在最终的PNG / JPEG中获得更高的图像分辨率将不胜感激!
#1 楼
似乎可以使用以下方法:convert \
-verbose \
-density 150 \
-trim \
test.pdf \
-quality 100 \
-flatten \
-sharpen 0x1.0 \
24-18.jpg
它产生左图。将其与我原始命令的结果(右图)进行比较:
并选择“在新标签页中打开图像...”。)
还要牢记以下事实:
图像上较差,模糊的图像右侧的文件大小为1.941.702字节(1.85 MB)。
其分辨率为3060x3960像素,使用16位RGB颜色空间。
左侧的更好,更清晰的图像具有文件大小337.879字节(330 kByte)。
其分辨率为758x996像素,使用8位灰度颜色空间。
因此,无需调整大小;添加
-density
标志。密度值150很奇怪-尝试一系列的值会导致两个方向上的图像看起来都更差!评论
density参数有点特殊,因为in必须位于输入文件之前。由于PDF是一种基于矢量的文件格式,没有像素的概念,因此它表示“页面为8英寸乘12英寸”。如果需要像素,则可以使用浓度设置来告诉它,要在输出中获得每英寸多少个像素。例如使用150,您将在结果图像中得到8x150 = 1200 x 12x150 = 1800像素。这也是进行锐化,对比度,压缩等设置的像素数量。
–丹尼尔·施奈勒(Daniel Schneller)
13年8月2日在7:30
在Mac OS上可能会导致黑色背景(请参阅stackoverflow.com/questions/10934456/…)。要解决此问题,请添加-flatten。
– fbiville
16-4-16在21:59
当我尝试将pdf转换为png时,在Mac OS上出现了黑色背景,添加了-flatten解决了它。
– olala
16年9月1日在22:34
哇!刚使用-density和-flatten选项来减小pdf的大小(到另一个pdf)。 -flatten选项确实有助于减小总大小。就我而言,没有视觉障碍。
– parvus
16-10-6在8:45
如果起始图像的质量低于该值,则-density标志在较高的值上可能会给出较差的结果。
– parvus
16-10-6在8:48
#2 楼
我个人喜欢这样。convert -density 300 -trim test.pdf -quality 100 test.jpg
文件大小是原来的两倍多,但对我来说看起来更好。
-density 300
设置dpi -trim
删除与角像素颜色相同的任何边缘像素。-quality 100
将JPEG压缩质量设置为最高质量。 br /> -sharpen
之类的文字不能很好地与文本配合使用,因为它们会撤消字体渲染系统使它更清晰的功能。如果您确实想要将其炸毁,请在此处调整大小可能是更大的dpi值,例如
targetDPI * scalingFactor
,它将以您想要的分辨率/尺寸呈现PDF。imagemagick.org上的参数说明在此处
评论
它的大小是原来的两倍,主要是因为输出密度增加了一倍,并且jpg压缩质量设置为max(因此压缩率不高)。
–rivimey
15年4月15日在14:14
使用convert,我们将如何知道转换了多少页面?
– Kiran Reddy
17-10-12在7:27
嗯,这绝对是要走的路。增强该源密度并删除-sharpen。质量比使用默认设置好得多,并且比使用-sharpen更自然。
–约书亚·品特(Joshua Pinter)
19年1月5日,0:20
这应该是最好的答案,而不是当前的答案。另外,在Ubuntu上也需要这样做:转换失败时,mv /etc/ImageMagick-6/policy.xml /etc/ImageMagick-6/policy.xmlout(来源:askubuntu.com/a/1081907)
– Costin Gușă
20年8月26日在7:13
#3 楼
我在命令行上使用pdftoppm
来获取初始图像,通常具有300dpi的分辨率,因此pdftoppm -r 300
,然后使用convert
进行修整和PNG转换。评论
在不使用Imagemagick的情况下,此解决方案似乎是出于透明转换的精神。 pdftoppm也可以输出JPEG和PNG。
–亚伦·布里克(Aaron Brick)
16 Sep 4'在5:16
pdftoppm为我带来了非常不错的JPEG(并且仍然小于IM)!谢谢!
– jkd
20年8月16日在10:03
似乎没有'-r'标志,pdftoppm使用pdf的原始分辨率,这是您可以从pdf中获得的最大分辨率。转换工具保持该分辨率。
–乔沙
20-11-02在20:05
#4 楼
通常,我使用原始分辨率的'pdfimages'提取嵌入的图像,然后使用ImageMagick的转换为所需的格式:$ pdfimages -list fileName.pdf
$ pdfimages fileName.pdf fileName # save in .ppm format
$ convert fileName-000.ppm fileName-000.png
这将生成最佳和最小的结果文件。
注意:对于有损JPG嵌入式图像,必须使用-j:
$ pdfimages -j fileName.pdf fileName # save in .jpg format
对于最近使用的poppler,您可以使用-all保存有损为jpg,无损为png
在提供很少的Win平台上,您必须从以下位置下载最新的(0.37 2015)'poppler-util'二进制文件:
http://blog.alivate。 com.au/poppler-windows/
评论
只是一个小小的修正:第一个代码块中的第二个命令应该以pdftoppm开头而不是pdfimages
–satyanarayan rao
19年6月25日在17:36
不,较旧的pdfimages会将提取的图像保存到pdftoppm之类的ppm中,而pdftoppm从来没有-list选项。如注释中所述,当前的pdf图像可以使用-all直接保存为PNG和JPG。
–Valerio
19年6月26日在20:52
#5 楼
当将大型PDF批量处理为PNG和JPG以使用gs
使用的基础convert
(又名Ghostscript)命令时,我发现它既更快又更稳定。您可以在的输出中看到该命令。
convert -verbose
,还有一些可能的调整(YMMV),很难/无法直接通过convert
访问。但是,使用
gs
进行修剪和锐化将变得更加困难,因此我说YMMV!#6 楼
我确实没有在convert
上取得过成功([2020年5月更新:实际上:它几乎对我不起作用]),但是我在pdftoppm
上取得了出色的成功。以下是从PDF生成高质量图像的几个示例:[每pg产生约25 MB大小的文件]以300 DPI输出未压缩的.tif文件格式放入名为“ images”的文件夹中,文件名为pg-1.tif,pg-2.tif,pg-3.tif等:
mkdir -p images && pdftoppm -tiff -r 300 mypdf.pdf images/pg
[每pg产生约1MB大小的文件]以300 DPI的.jpg格式输出:
mkdir -p images && pdftoppm -jpeg -r 300 mypdf.pdf images/pg
[产生约2MB大小的文件每pg]以最高质量(最低压缩)并仍以300 DPI的.jpg格式输出:
mkdir -p images && pdftoppm -jpeg -jpegopt quality=100 -r 300 mypdf.pdf images/pg
有关更多说明,选项和示例,请在此处查看我的完整答案:
https://askubuntu.com/questions/150100/extracting-embedded-images-from-a-pdf/1187844#1187844。
相关:
[如何将PDF变成带有
pdf2searchablepdf
的可搜索PDF] https://askubuntu.com/questions/473843/how-to-turn-a-pdf -into-a-text-searchable-pdf / 1187881#1187881 交叉链接:
如何转换在Linux中使用命令行将PDF转换成JPG吗?
https://unix.stackexchange.com/questions/11835/pdf-to-jpg-without-quality-loss-gscan2pdf/585574#585574
#7 楼
它还可以为您带来良好的效果:exec("convert -geometry 1600x1600 -density 200x200 -quality 100 test.pdf test_image.jpg");
#8 楼
Linux用户在这里:我尝试使用convert
命令行实用程序(用于PDF到PNG),但对结果不满意。我发现这样做更容易,而且效果更好:用pdftk提取pdf页面
例如:
pdftk file.pdf cat 3 output page3.pdf
用
GIMP
打开(导入)pdf 重要:将导入
Resolution
从100
更改为300
或600 pixel/in
在
GIMP
中以PNG格式导出(将文件扩展名更改为.png)。编辑:
Comments
。使用的转换命令:convert -density 300 -trim struct2vec.pdf -quality 100 struct2vec.png
GIMP
:以300 dpi(px / in)导入;导出为PNG压缩级别3。我还没有在命令行上使用GIMP(请参阅下面的我的评论)。
评论
如果您有数千页,可以自动执行吗?
– JBWhitmore
17年9月22日在18:28
@JBWhitmore:好问题。当然,编写pdftk命令很简单,因为它已经在命令行中了。我做了一个非常快速的Google搜索,发现GIMP具有批处理模式(我还没有尝试过,但是看起来也应该可以编写脚本):gimp.org/tutorials/Basic_Batch
–维多利亚·斯图尔特(Victoria Stuart)
17-09-22在22:26
@JBWhitmore在此问题/答案中显示了一个示例脚本来自动执行此转换:unix.stackexchange.com/questions/121293/…
–tsherwen
18年11月19日在12:25
@tsherwen,如果我正确阅读了该链接,则说明了如何自动执行convert命令。我对如何做到这一点不感到困惑。但是,此答案表示将GIMP用作步骤之一-此答案或链接都没有显示如何自动执行。
– JBWhitmore
18年11月19日在17:27
@JBWhitmore。我错误地只是在考虑转换问题。在阅读自动化注释时,我仅看到此答案的一部分提到了转换和您的问题。感谢您稍后在此线程上的答复,我将其与链接到的解决方案相结合并解决了我遇到的另一个问题。
–tsherwen
18年11月20日在14:37
#9 楼
在ImageMagick中,您可以执行“超级采样”。您可以指定较大的密度,然后根据最终输出尺寸的大小调整尺寸。例如,使用您的图像:convert -density 600 test.pdf -background white -flatten -resize 25% test.png
下载图像以全分辨率查看以进行比较。.
如果您希望做进一步的处理,我不建议保存为JPG。
如果您希望输出与输入的大小相同,则将其大小调整为与输入的比率的倒数密度设为72。例如,-密度288和-调整大小25%。 288 = 4 * 72和25%= 1/4
密度越大,产生的质量越好,但是处理时间更长。
#10 楼
另一个建议是您可以使用GIMP。只需将PDF文件加载到GIMP->中,另存为.xcf,即可对图像执行任何操作。
评论
通过命令行执行此操作的原因是,我有数千个页面需要此过程。
– JBWhitmore
13-10-24在13:09
此外,GIMP会在加载时呈现页面,因此在选择要加载的页面时需要设置分辨率。如果从加载时默认为100 DPI开始,则将输出参数设置为什么都没关系。
–基思·戴维斯(Keith Davies)
17年2月9日在1:29
#11 楼
我使用了pdf2image。一个简单的python库,其工作方式类似于charm。首先在非linux机器上安装poppler。您可以只下载zip文件。解压缩程序文件,然后将bin添加到Machine Path。
之后,您可以在python类中使用pdf2image,例如:
from pdf2image import convert_from_path, convert_from_bytes
images_from_path = convert_from_path(
inputfile,
output_folder=outputpath,
grayscale=True, fmt='jpeg')
我是
后来您可以将exe与文件输入和输出参数一起使用。我已在C#中使用它,并且一切正常。
图像质量很好。 OCR正常工作。
#12 楼
我使用icepdf一个开源的Java pdf引擎。检查办公室演示。package image2pdf;
import org.icepdf.core.exceptions.PDFException;
import org.icepdf.core.exceptions.PDFSecurityException;
import org.icepdf.core.pobjects.Document;
import org.icepdf.core.pobjects.Page;
import org.icepdf.core.util.GraphicsRenderingHints;
import javax.imageio.ImageIO;
import java.awt.image.BufferedImage;
import java.awt.image.RenderedImage;
import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
public class pdf2image {
public static void main(String[] args) {
Document document = new Document();
try {
document.setFile("C:\Users\Dell\Desktop\test.pdf");
} catch (PDFException ex) {
System.out.println("Error parsing PDF document " + ex);
} catch (PDFSecurityException ex) {
System.out.println("Error encryption not supported " + ex);
} catch (FileNotFoundException ex) {
System.out.println("Error file not found " + ex);
} catch (IOException ex) {
System.out.println("Error IOException " + ex);
}
// save page captures to file.
float scale = 1.0f;
float rotation = 0f;
// Paint each pages content to an image and
// write the image to file
for (int i = 0; i < document.getNumberOfPages(); i++) {
try {
BufferedImage image = (BufferedImage) document.getPageImage(
i, GraphicsRenderingHints.PRINT, Page.BOUNDARY_CROPBOX, rotation, scale);
RenderedImage rendImage = image;
try {
System.out.println(" capturing page " + i);
File file = new File("C:\Users\Dell\Desktop\test_imageCapture1_" + i + ".png");
ImageIO.write(rendImage, "png", file);
} catch (IOException e) {
e.printStackTrace();
}
image.flush();
}catch(Exception e){
e.printStackTrace();
}
}
// clean up resources
document.dispose();
}
}
我也尝试过imagemagick和pdftoppm,pdftoppm和icepdf都比imagemagick具有更高的分辨率。
#13 楼
请在拒绝投票之前注意,该解决方案适用于使用图形界面的Gimp,而不适用于使用命令行的ImageMagick,但是作为替代方案,它对我来说效果很好,这就是为什么我觉得有必要在此处分享。 br />按照以下简单步骤从PDF文档中提取任何格式的图像
下载GIMP图像处理程序
安装后打开该程序
打开要提取图像的PDF文档
仅选择要提取图像的PDF文档的页面。
N / B:如果仅需要封面图像,仅选择第一页。
选择要从中提取图像的页面后,单击打开
打开页面时,在GIMP上单击文件菜单
在文件菜单中选择导出为
在弹出的对话框下方按扩展名(例如png)选择您喜欢的文件类型。
单击“导出”将图像导出到所需位置。
是然后您就可以检查文件浏览器中的导出图像了。
就这样。
希望对您有所帮助
评论
问题是使用命令行使用ImageMagick,而不是使用图形界面使用Gimp。
–悉尼
19年7月5日在8:58
#14 楼
您附加的PNG文件看起来真的很模糊。如果您需要对作为PDF预览生成的每个图像进行额外的后期处理,则会降低解决方案的性能。2JPEG可以将附加到您的PDF文件转换为清晰的JPG并裁剪一次通话中的空白边距:
2jpeg.exe -src "C:\In\*.*" -dst "C:\Out" -oper Crop method:autocrop
评论
最初的PNG中的模糊性是首先激发问题的原因,并且公认的答案中的PNG相当清晰。
– JBWhitmore
14-10-13在17:35
#15 楼
使用以下命令行:convert -geometry 3600x3600 -density 300x300 -quality 100 TEAM\ 4.pdf team4.png
这将正确地转换您所要求的文件。
#16 楼
以下python脚本可在任何Mac(Snow Leopard和更高版本)上使用。它可以在命令行中使用连续的PDF文件作为参数,也可以在Automator中放入“运行Shell脚本”操作,然后进行服务(在Mojave中使用“快速操作”)。您可以在脚本中设置输出图像的分辨率。
可以从github下载脚本和快速操作。
#!/usr/bin/python
# coding: utf-8
import os, sys
import Quartz as Quartz
from LaunchServices import (kUTTypeJPEG, kUTTypeTIFF, kUTTypePNG, kCFAllocatorDefault)
resolution = 300.0 #dpi
scale = resolution/72.0
cs = Quartz.CGColorSpaceCreateWithName(Quartz.kCGColorSpaceSRGB)
whiteColor = Quartz.CGColorCreate(cs, (1, 1, 1, 1))
# Options: kCGImageAlphaNoneSkipLast (no trans), kCGImageAlphaPremultipliedLast
transparency = Quartz.kCGImageAlphaNoneSkipLast
#Save image to file
def writeImage (image, url, type, options):
destination = Quartz.CGImageDestinationCreateWithURL(url, type, 1, None)
Quartz.CGImageDestinationAddImage(destination, image, options)
Quartz.CGImageDestinationFinalize(destination)
return
def getFilename(filepath):
i=0
newName = filepath
while os.path.exists(newName):
i += 1
newName = filepath + " %02d"%i
return newName
if __name__ == '__main__':
for filename in sys.argv[1:]:
pdf = Quartz.CGPDFDocumentCreateWithProvider(Quartz.CGDataProviderCreateWithFilename(filename))
numPages = Quartz.CGPDFDocumentGetNumberOfPages(pdf)
shortName = os.path.splitext(filename)[0]
prefix = os.path.splitext(os.path.basename(filename))[0]
folderName = getFilename(shortName)
try:
os.mkdir(folderName)
except:
print "Can't create directory '%s'"%(folderName)
sys.exit()
# For each page, create a file
for i in range (1, numPages+1):
page = Quartz.CGPDFDocumentGetPage(pdf, i)
if page:
#Get mediabox
mediaBox = Quartz.CGPDFPageGetBoxRect(page, Quartz.kCGPDFMediaBox)
x = Quartz.CGRectGetWidth(mediaBox)
y = Quartz.CGRectGetHeight(mediaBox)
x *= scale
y *= scale
r = Quartz.CGRectMake(0,0,x, y)
# Create a Bitmap Context, draw a white background and add the PDF
writeContext = Quartz.CGBitmapContextCreate(None, int(x), int(y), 8, 0, cs, transparency)
Quartz.CGContextSaveGState (writeContext)
Quartz.CGContextScaleCTM(writeContext, scale,scale)
Quartz.CGContextSetFillColorWithColor(writeContext, whiteColor)
Quartz.CGContextFillRect(writeContext, r)
Quartz.CGContextDrawPDFPage(writeContext, page)
Quartz.CGContextRestoreGState(writeContext)
# Convert to an "Image"
image = Quartz.CGBitmapContextCreateImage(writeContext)
# Create unique filename per page
outFile = folderName +"/" + prefix + " %03d.png"%i
url = Quartz.CFURLCreateFromFileSystemRepresentation(kCFAllocatorDefault, outFile, len(outFile), False)
# kUTTypeJPEG, kUTTypeTIFF, kUTTypePNG
type = kUTTypePNG
# See the full range of image properties on Apple's developer pages.
options = {
Quartz.kCGImagePropertyDPIHeight: resolution,
Quartz.kCGImagePropertyDPIWidth: resolution
}
writeImage (image, url, type, options)
del page
#17 楼
您可以在LibreOffice Draw(通常预装在Ubuntu中)中进行操作:在LibreOffice Draw中打开PDF文件。
滚动到所需的页面。
确保正确放置文本/图像元素。如果没有,则可以在页面上进行调整/编辑。
顶部菜单:文件>导出...
在右下方菜单中选择所需的图像格式。我建议使用PNG。
命名文件,然后单击“保存”。
将显示“选项”窗口,以便您调整分辨率和大小。
单击“确定”,就完成了。
#18 楼
在Mac上使用“预览”实际上非常容易。所有您需要做的就是在“预览”中打开文件并另存为(或导出)png或jpeg,但是请确保在窗口底部至少使用300 dpi以获得高质量的图像。评论
如果您有数千页,可以自动执行吗?
– JBWhitmore
18年7月8日在3:39
评论
我不知道,您也可以尝试链接...另请参阅:askubuntu.com/a/50180/64957
如果您使用的是Mac,请查看sip的手册页,即“可编写脚本的图像处理系统”。这是macOS内置的命令行图像编辑器,适用于PDF和许多其他图像类型。
@ghoti sips只会将PDF文件的第一页转换为图像。