阻止Microsoft Word 2010平滑屏幕截图?


30

当我将JPEG屏幕截图插入Microsoft Word时,它会平滑它们,而不是保留位图中的原始像素。然后,当我打印到PDF(使用Acrobat Distiller)时,根据我的下采样设置,我会得到模糊的屏幕截图或文件尺寸过大。

我想要的是:

我希望Word和Acrobat不用理会位图,以便它们在像素完整的情况下完成整个过程。这是放大原始图像的样子:

我想要的是

我得到的是:

这是当您插入相同的图像并放大时Word文档的外观。将其打印为PDF时,所有这些多余的像素会导致文件大得多。

我得到什么

样本文件:

  • Test.png(56K)示例屏幕快照图像文件
  • Test.docx(69K)一个Word文件,仅包含此图像
  • Test.PDF(9.4MB)使用Distiller从Word文件中打印的PDF文件,所有下采样功能均已关闭
  • Test2.PDF(98K)使用Word 2010的“另存为PDF”工具生成的PDF文件(请注意压缩图像的质量很低)

编辑:这是与Word 2010-我已经更新了标签以反映这一点。


编辑:我已经确认OpenOffice没有此问题。我已经打开Test.docx(上面已引用)并将其从OO中导出为PDF(在选项中的“图像”下选择“无损压缩”),并且图像不受损害。

不幸的是,OpenOffice破坏了我创建的更复杂的Word文档的格式。因此,我不能只在Word中创建文档并使用OO来呈现PDF。我必须完全切换到OO,这比我现在准备采取的步骤更大。


您将它们粘贴为什么?位图,增强型图元文件,JPEG,GIF,PNG,Windows图元文件?
Rhys Gibson

它们是使用“从文件插入图片”插入到文档中的JPEG文件(从Photoshop中以最高质量保存)。
Herb Caudill

1
您是否尝试过其他(无损)文件格式(例如PNG)?如果幸运的话,Word和Distiller不太可能尝试进行有用的重新压缩。
DMA57361 2011年

PNG存在相同的问题(我在上面刚刚添加了一个示例)。
赫尔·卡迪尔

您在这里遇到的有趣问题...这里的最终目标是减小PDF的大小?
詹姆斯·默兹

Answers:


9

Word可能只是渲染放大的图像,并以这种方式将其作为打印机输入发送(我认为Distiller可以作为打印机使用)。如果是这样,那么这对于普通打印机是好的,但是对于生产PDF文件的假打印机来说效率很低。

例如pdfLaTeX将图像正确嵌入到输出文件中。检查我上传到min.us画廊的PDF:在LaTeX文档中嵌入图像

重要的是您正在使用什么PDF生成堆栈。如果尝试使用其他PDF打印机(例如出色且免费的PDFCreator)不能解决问题,则应尝试使用专用的PDF导出,即不作为打印机工作。AFAIK最新的Word版本具有内置的PDF导出功能,因此,如果在文档中嵌入了图像,则可以正确实现PDF导出功能。

巨大的编辑

图库已重命名为在LaTeX vs Word中嵌入PNG图像

我已经对mytest.pdfpdfLaTeX生成的文件和test2.pdfWord 生成的文件进行了更彻底的研究。

mytest.pdf test2.pdf

让我们从解压缩开始。如果查看未压缩的文件,您将很容易发现图像流的开始(<<...>>stream带有Width和Height参数的行,与中的相同test.png,即176x295),并以endstream标记结束。偷看时间。

(此时警告pdftk假定为版本1.41)

test2.pdf

$ pdftk test2.pdf output test2uc.pdf uncompress
$ sed '\,^<</Width 176[^>]*/Height 295[^>]*>>stream$,!d' test2uc.pdf
<</Width 176/BitsPerComponent 8/Interpolate true/Height 295/Filter[/DCTDecode]/Subtype/Image/Length 20003/ColorSpace/DeviceRGB/Type/XObject>>stream
$ sed '1,\,^<</Width 176[^>]*/Height 295[^>]*>>stream$,d;/^endstream$/,$d' test2uc.pdf > test2stream
$ xxd test2stream | head -10
0000000: ffd8 ffe0 0010 4a46 4946 0001 0101 0048  ......JFIF.....H
0000010: 0048 0000 ffe1 005c 4578 6966 0000 4d4d  .H.....\Exif..MM
0000020: 002a 0000 0008 0004 0302 0002 0000 0016  .*..............
0000030: 0000 003e 5110 0001 0000 0001 0100 0000  ...>Q...........
0000040: 5111 0004 0000 0001 0000 0b13 5112 0004  Q...........Q...
0000050: 0000 0001 0000 0b13 0000 0000 5068 6f74  ............Phot
0000060: 6f73 686f 7020 4943 4320 7072 6f66 696c  oshop ICC profil
0000070: 6500 ffe2 0c58 4943 435f 5052 4f46 494c  e....XICC_PROFIL
0000080: 4500 0101 0000 0c48 4c69 6e6f 0210 0000  E......HLino....
0000090: 6d6e 7472 5247 4220 5859 5a20 07ce 0002  mntrRGB XYZ ....
$ file test2stream 
test2stream: JPEG image data, JFIF standard 1.01

因此,Word在其内部输出上提供了JPEG而不是PNG,以进行进一步的PDF处理。哇!将输出发送到打印机时,可能会发生同样的事情。

test2stream.jpg

mytest.pdf

$ pdftk mytest.pdf output mytestuc.pdf uncompress
$ sed '\,^<</Width 176[^>]*/Height 295[^>]*>>stream$,!d' mytestuc.pdf
<</Width 176/BitsPerComponent 8/Height 295/Subtype/Image/Length 155760/ColorSpace/DeviceRGB/Type/XObject>>stream
$ sed '1,\,^<</Width 176[^>]*/Height 295[^>]*>>stream$,d;/^endstream$/,$d' mytestuc.pdf > myteststream
$ xxd myteststream | head -10
0000000: ebeb ebea eaea ecec eceb ebeb ebeb ebeb  ................
0000010: ebeb ebeb ebec ecec ebeb ebeb ebeb ebeb  ................
0000020: ebeb ebeb ebeb ebeb ebeb ebeb ebeb ebeb  ................
0000030: ebeb ebea eaea eaea eaec ecec eaea eaec  ................
0000040: ecec ebeb ebec ecec ebeb ebeb ebeb ebeb  ................
0000050: ebeb ebeb ebeb ebeb ebeb ebeb ebeb ebeb  ................
0000060: ebeb ebeb ebeb ebeb ebeb ebeb ebeb ebeb  ................
0000070: ebeb ebeb ebeb ebeb ebeb ebeb ebeb ebeb  ................
0000080: ebea eaea ecec eceb ebeb ebeb ebea eaea  ................
0000090: ebeb ebeb ebeb ebeb ebeb ebeb ebeb ebeb  ................
$ file myteststream 
myteststream: DOS executable (COM)

它不是COM文件,但也不是PNG。

$ du -b test.png test2stream myteststream 
57727   test.png
20004   test2stream
155761  myteststream

你现在看到了吗?pdfLaTeX生成的PDF图像(PNG)可能是简单的原始格式(176 * 295 * 3 = 155760,1来自多余的换行符)。让我们检查一下:

$ convert -depth 8 -size 176x295 rgb:myteststream myteststream.png

而且我们有了原始图像!不,等等 看起来pdftk 1.41的解压缩是错误的,图像几乎相同,但有一些缺陷。我已升级到pdftk 1.44,但此版本完全不解压缩图像流。而且pdftk不会在一行中输出流字典,因此使用sed进行的上述提取不再起作用,但是现在没有必要对其进行修复。

那么我们可以对Word做什么呢?没什么办法。至少您可以将嵌入式图像从一个PDF移植到另一个。我使用最近的pdftk重复解压缩两个PDF,在vim中打开它们,用test2uc.pdf <<...>>stream...endstreamfrom 中的副本代替mytestuc.pdf,另存为test2fixuc.pdf并压缩为test2fix.pdf

test2fix.pdf

测试.pdf

毕竟不检查您的大PDF将是一种罪过。好的,我准备了另一个oneliner与pdftk 1.44未压缩的PDF一起使用,以列出图像流及其在文件中的开始行。因此,我将从解压缩开始test.pdf

(此时,警告pdftk假定为版本1.44)

$ pdftk test.pdf output testuc.pdf uncompress
$ awk '{if(i)h=h$0} /^[0-9]+ [0-9]+ obj $/{i=1;h=""}/^stream$/{i=0;if(h!~/\/Image/)next;print h,":"NR+1}' testuc.pdf 
<</ColorSpace /DeviceRGB/Subtype /Image/Length 10443804/Width 707/Type /XObject/BitsPerComponent 8/Height 4924>>stream :619
<</ColorSpace /DeviceRGB/Subtype /Image/Length 11264460/Width 953/Type /XObject/BitsPerComponent 8/Height 3940>>stream :12106
<</ColorSpace /DeviceRGB/Subtype /Image/Length 2813256/Width 953/Type /XObject/BitsPerComponent 8/Height 984>>stream :12910
<</ColorSpace /DeviceRGB/Subtype /Image/Length 11264460/Width 953/Type /XObject/BitsPerComponent 8/Height 3940>>stream :18547
<</ColorSpace /DeviceRGB/Subtype /Image/Length 2813256/Width 953/Type /XObject/BitsPerComponent 8/Height 984>>stream :19312
<</ColorSpace /DeviceRGB/Subtype /Image/Length 4845216/Width 328/Type /XObject/BitsPerComponent 8/Height 4924>>stream :19326

这里真是疯了!6个原始图像(显然这次pdftk在解压缩时没有任何问题)合计为43444452字节!让我们重新检查test2uc.pdfmytestuc.pdf

$ awk '{if(i)h=h$0} /^[0-9]+ [0-9]+ obj $/{i=1;h=""}/^stream$/{i=0;if(h!~/\/Image/)next;print h,":"NR+1}' test2uc.pdf 
<</Width 176/BitsPerComponent 8/Interpolate true/Height 295/Filter /DCTDecode/Subtype /Image/Length 20003/ColorSpace /DeviceRGB/Type /XObject>>stream :113
przemoc@debian:~/latex/test/img/mod$ awk '{if(i)h=h$0} /^[0-9]+ [0-9]+ obj $/{i=1;h=""}/^stream$/{i=0;if(h!~/\/Image/)next;print h,":"NR+1}' mytestuc.pdf 
<</DecodeParms <</Colors 3/Columns 176/Predictor 10/BitsPerComponent 8>>/Width 176/BitsPerComponent 8/Height 295/Filter /FlateDecode/Subtype /Image/Length 54954/ColorSpace /DeviceRGB/Type /XObject>>stream :22

在两种情况下,只有一个图像流。为什么会增加更多?!

$ sed '1,618d;/^endstream $/q' testuc.pdf | convert -depth 8 -size 707x4924 rgb:- testuc-stream1.png
$ sed '1,12105d;/^endstream $/q' testuc.pdf | convert -depth 8 -size 953x3940 rgb:- testuc-stream2.png
$ sed '1,12909d;/^endstream $/q' testuc.pdf | convert -depth 8 -size 953x984 rgb:- testuc-stream3.png
$ sed '1,18546d;/^endstream $/q' testuc.pdf | convert -depth 8 -size 953x3940 rgb:- testuc-stream4.png
$ sed '1,19311d;/^endstream $/q' testuc.pdf | convert -depth 8 -size 953x984 rgb:- testuc-stream5.png
$ sed '1,19325d;/^endstream $/q' testuc.pdf | convert -depth 8 -size 328x4924 rgb:- testuc-stream6.png

图像被切割成许多片段……看起来像是一种完全愚蠢的保护,也许是Distiller引入的(也许可以将其关闭)?我怀疑PDFCreator会吐出同样的东西,除非是Word造成这种令人难以置信的精神错乱...

testuc-stream1.png和其他(使用向右箭头导航)

结论

重要的事情是:

  • 您可以清楚地看到,被切成碎片的巨大图像实际上是放大的JPEG,所以我的假设是正确的,
  • 因为在PDFCreator中您还会在输出中获得巨大的文件,是Word为伪造的PDF打印机提供了巨大的图像,而我先前的假设也是正确的。

ew 这项调查花了一些时间。话是垃圾。

解决方法?

同时,提出了一些建议。让我评论一下。

使用像LibreOffice这样的具有体面的PDF支持的writer (忘记OpenOffice,现在已经过时了)是一个很好的解决方案,除非出现一些不兼容的情况使您无法使用它。

在页面上的同一框中使用较大的图像也不是什么坏主意,因为即使在进行JPEG缩放后,伪像也将不那么可见。

我的另一个错误是从一开始就使用JPEG。这样,Word不应重新压缩它(您永远不会知道...),并且可以提供最高质量的JPEG。还有无损JPEG压缩。雷蒙德(Redmond)的开发人员可能以为不需要它,因此,如果Word不处理此类JPEG,我不会感到惊讶。嗯,TBH并没有像算术编码那样得到广泛支持(即使在开源世界中也是如此)(或者在算术编码的情况下甚至更糟)。

convert test.png -quality 100 -resize $((100*300/72))% test-300dpi-mitchell.jpg
convert test.png -quality 100 -filter box -resize $((100*300/72))% test-300dpi-box.jpg
convert test.png -quality 100 test.jpg

(在Windows中使用416代替$(())POSIX Shell中可用的此算术扩展)

我认为默认的Mitchell是升级的好选择,但是如果您真的想要这样的像素图像,请按照@ceving的建议使用Box。当然,仅当您必须(出于某种原因)使用假PDF打印机时,前两个文件才有用。

我已经上传了所有三个文件。

测试-300dpi的-mitchell.jpg(426 KB) 测试-300dpi的-box.jpg(581 KB) test.jpg放在(74 KB)

如果我的假设是正确的,并且Word不会重新压缩JPEG图像,则只需使用最后一个未放大的图像,然后使用内置的PDF输出,因为它的缺点少(至少避免了不必要的放大)。


谢谢,@przemoc。我尝试使用PDFCreator并获得与Distiller相同的结果(图像就像在Word中一样模糊,如果关闭压缩,则会得到一个很大的文件)。我还尝试了“另存为PDF”,并获得了图像的高度压缩版本,其中包含许多JPEG伪像(尽管原始图像为PNG,并且已按照@nihcap建议关闭了图像压缩。我将上传结果。
赫尔·卡迪尔

@Herb重要更新。我还没有解决您的问题,但是我对此做了一些说明,这应该很有趣。至少我希望如此...
przemoc 2011年

tl; dr我提供了一种100%可行的解决方法,一种可能可行。1) 100%的工作是将具有正确嵌入的无损压缩原始图像(从LibreOffice或pdfLaTeX生成)的PDF图像移植到从Word生成的PDF中(避免使用假PDF打印机!)。不幸的是,如果您有很多图像,可能会很累。2)假设Word不会为内部输出重新压缩JPEG图像,请使用最高质量的JPEG,例如由convertImageMagick或XnView 产生的JPEG 。在这种情况下,您会失去质量,但是至少可以控制。
przemoc

我之所以能提供悬赏,是因为您进行了大量的研究。当然,我的问题仍然没有解决,但是似乎无能为力-看起来微软在2007年至2010
。– Herb Caudill

@草药谢谢。实际上,我以前从未在内部级别上研究过PDF,因此,这项研究非常有趣且内容丰富(而且我遇到了一些新问题,为了自己理解事物,我将不得不解决这些问题)。我无法为您提供更令人满意的结果,这让我感到有些难过,例如,真正的解决方案而不是对正在发生的事情,有罪的人和解决方法有所了解。但是,让我们不结束案件,这里有一些悬而未决的问题。我没有Word,所以我必须要您再上传2个文件1)PDF /带有PDFCreator的PNG 2)PDF /带有Word的我的最后一个JPG。TIA
przemoc

7

打开“ 文件” > “设置” >“ 高级”,然后在“ 图像大小和质量”部分中,选中“不压缩文件中的图像”选项(请参阅截屏以确定此选项的位置)
文字设定

下图是在激活该选项之前和之后插入的同一JPG图像(放大了400%的文档捕获以显示抗锯齿效果):
在此处输入图片说明


您知道在Word 2007的哪里可以找到此设置吗?
dimo414

实际上,我在原始帖子中错漏了这个问题-不是Word在压缩或抗锯齿图像,而是它使图像平滑而不是显示原始像素。我已经尝试过您在此处指出的设置,但是它仍在使图像平滑,这会导致PDF输出过大。
赫尔·卡迪尔

@ dimo414单击“ Office”按钮,然后单击“设置”,其他步骤应相同。
nyuszika7h 2011年

2
这是Word 2010的新选项。
2011年

1
我觉得我应该澄清一下,因为这获得了很多赞成票-这是一个很好的了解背景,但它完全不会影响我遇到的问题。
赫尔·卡迪尔

1

看起来Microsoft Word的缩放功能使用了双线性过滤。这不应更改图像本身,而应更改图像以100%以外的放大倍数显示的方式。您想要的是最接近的邻居缩放比例,但是我怀疑MS Word是否可以选择。


0

我重复了将Test.png插入Word 2007中的文档的操作,令我惊讶的是,结果取决于一个人使用的机制。

如果使用“插入/图片”,则图片会变得平滑。
但是,如果进入图像编辑器并进行复制,然后粘贴到Word中,则图像将不平滑。

其他可能的解决方法是:

  1. 尝试使用选择性粘贴作为位图或与设备无关的位图。
  2. 不要粘贴图像。使用“插入”选项卡/“插图”组/“图片”命令,然后将“插入”下拉按钮更改为“链接到文件”。可以针对Web优化图像文件,以减少空间。

嗯-那不是我的经验。从MS Paint或Photoshop粘贴时,获得的平滑效果与使用“从文件插入图片”效果相同。我使用的是Word 2010中,我不知道这是否就是区别-我不记得有这个问题,当我用Word 2007中
香草考迪尔

嗯,这是Word 2010的新功能吗?也许Microsofties意识到糊不这样做“正确”的事情,在Word 2010中的“固定”它
harrymc

3
关于屏幕截图像​​素化,您可以使用Vista的截图工具并将文件另存为PNG,以防止产生这种噪音。
dimo414 2011年

@ dimo414:谢谢,非常有用的提示。
哈里奇2011年

@ Herb Caudill:如果您尝试将图片插入.doc,同时确保Word选项/高级/兼容性为“ Word 2003”,会发生什么情况?
2011年

0

将原始图像缩放到300dpi或您在PDF导出过程中使用的任何分辨率,这可能是最简单的解决方案。例如,ImageMagick的转换程序可以做到这一点。

原始图像的宽度为176像素。如果要以300dpi的比例将其缩放到4英寸,则目标宽度为1200像素。这样可以做到:

convert test.png -filter Box -resize 1200 test_300dpi.png

我已经体验到,防止Microsoft产品试图思考对您有好处的方法总会更好。最好自己决定。


我相信PDF文件具有本机嵌入的图像分辨率,因此,如果您调整图像的大小以使其匹配,则Word可能能够跳过一步。不幸的是,我担心生成的PDF大小可能不合理。
Mark Ransom

-1

这个问题与类似

它与包装样式有关……仅将其设置为顶部和底部。在这里阅读。


不,更改包装选项没有任何区别。
赫尔·卡迪尔

@草药,此问题可能需要更改MS部件上的代码。我想念Outlook 2003,您可以在其中插入图像并期望它能按预期显示。
pcunite 2011年

-1

如果此评论太明显或不相关,请纠正我:

当我将一段文字的清晰图像(例如,我测试过.bmp和.png)粘贴到Word 2010文档(.docx)中时,结果是原始版本的模糊版本。这归因于Word的自动调整大小和图像处理,这与“选项”中的相关设置无关。但是如果我那么

  1. 选择图片
  2. 转到功能区标题“格式”
  3. 选择功能区最左侧区域中的小图标,该图标看起来像带有“撤消”箭头的小图像
  4. 下拉菜单
  5. 选择下面的项目“还原图像和大小”(这是德语的宽松翻译),

然后我粘贴的清晰图像就会代替模​​糊的图像再次出现。


注意:如果我使用Acrobat Reader中的内置照片工具,然后直接粘贴到Word,则以上操作无效。我需要截取整个屏幕的屏幕截图或通过IrfanView。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.