Остановить Microsoft Word 2010 от сглаживания скриншотов?
Когда я вставляю скриншоты JPEG в Microsoft Word, он сглаживает их, а не сохраняет исходные пиксели из растрового изображения. Когда я затем печатаю в PDF (используя Acrobat Distiller), в зависимости от моих настроек понижающего шаблона, я получаю размытые скриншоты или сильно раздутые размеры файлов.
Что я хочу:
Я бы хотел, чтобы Word и Acrobat оставались только в растровых изображениях, чтобы они прошли через процесс с неповрежденными пикселями. Вот как выглядит исходное изображение при увеличении:
- Скриншоты искажаются на Mac Mini с NVIDIA GeForce 9400M
- Отключение функции скриншотов iPhone
- Инструменты скриншотов, которые включают курсор мыши?
- Захватить снимок экрана активного windows?
- Как сделать скриншоты в Mac OS X?
Что я получаю:
Это то, что выглядит документ Word, когда вы вставляете одно и то же изображение и увеличиваете масштаб. Когда это печатается в PDF, все эти дополнительные пиксели приводят к значительно большему файлу.
Примеры файлов:
- Test.png (56K) Пример файла изображения скриншотов
- Test.docx (69K) Файл Word, содержащий только изображение
- Test.PDF (9.4MB) PDF-файл, напечатанный из файла Word с использованием Distiller, при выключенной понижающей дискретизации
- Test2.PDF (98K) PDF-файл, созданный с использованием инструмента Word 2010 «Сохранить как PDF» (обратите внимание на очень низкое качество сжатого изображения)
Изменить: это с Word 2010 – я обновил теги, чтобы это отразить.
Изменить: я подтвердил, что OpenOffice не имеет этой проблемы. Я открыл Test.docx (ссылка выше) и экспортировала его как PDF из OO (выбор «без потерь сжатия» в разделе «Изображения в параметрах»), и изображение приходит нездоровым.
- Test_OO.pdf
К сожалению, OpenOffice управляет форматированием более сложных документов Word, которые я создал; Поэтому я не могу просто создавать документы в Word и использовать OO для рендеринга PDF-файлов; Мне бы пришлось переключиться на OO вообще, что является большим шагом, чем я готов принять прямо сейчас.
- Как сделать снимок экрана с помощью элемента управления WPF?
- Как сделать снимок экрана с помощью xlib?
- Как быстро делать скриншоты в Java?
- Можно ли сделать частичный снимок экрана в Windows 7?
- Linux снимок экрана, который сохраняет снимки напрямую, не запрашивая имя файла
- Как изменить имя экрана по умолчанию в OS X Lion?
- Сделайте снимок экрана веб-страницы на Java
- Отправлять HTML-письмо в формате PNG
Word, возможно, просто отображает масштабированное изображение и отправляет его таким образом в качестве ввода принтера (я полагаю, что Distiller работает как принтер). Если это так, то это хорошо для обычных принтеров, но неэффективно для поддельных принтеров, создающих PDF-файлы.
Например, pdfLaTeX правильно встраивает изображение в выходной файл. Проверьте мой PDF-файл, загруженный в галерею min.us: Вложение изображения в документ LaTeX
Важным является то, что PDF-файл, который вы используете. Если вы пытаетесь использовать другой PDF-принтер, такой как большой и бесплатный PDFCreator , не устраняете проблему, тогда вы должны попробовать использовать выделенный PDF-экспорт, то есть не работать в качестве принтера. В последних версиях Word AFAIK встроен PDF-экспорт, поэтому, если он правильно реализован, вы получите небольшой файл, благодаря вложению изображений, используемых в документе.
ОГРОМНОЕ ИЗДАНИЕ
Галерея была переименована в Embedding PNG image в LaTeX vs Word
Я более подробно рассмотрел мой mytest.pdf
созданный pdfLaTeX и ваш test2.pdf
сгенерированный Word.
Mytest.pdf test2.pdf
Начнем с разжатия. Если вы посмотрите на несжатый файл, вы легко сможете определить начало потока изображений ( <<...>>stream
строка <<...>>stream
с параметрами Width и Height, то же самое, что и в test.png
, т.е. 176×295), которая заканчивается тегом 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
Вы видите это сейчас? Поток изображений (PNG) из PDF, созданный pdfLaTeX, возможно, является простым исходным форматом (176 * 295 * 3 = 155760, 1 – из избыточной новой строки). Давайте проверим это:
$ convert -depth 8 -size 176x295 rgb:myteststream myteststream.png
И у нас есть исходное изображение! Нет, подождите. Похоже, что неудобство pdftk 1.41 является ошибкой, и изображение было почти таким же, как и с несколькими недостатками. Я обновился до pdftk 1.44, но эта версия вообще не распаковывает поток изображений. Кроме того, pdftk не выводит словарь потока в одну строку, поэтому выше извлечения с использованием sed больше не работает, но теперь нет смысла его исправлять.
Итак, что мы можем сделать с Word? Не так много. По крайней мере, вы можете пересадить встроенное изображение из одного PDF в другой. Я повторил сжатие обоих PDF-файлов, используя недавний pdftk, открыл их в vim, заменил в test2uc.pdf
<<...>>stream...endstream
с копией mytestuc.pdf
, сохраненной как test2fixuc.pdf
и сжатой до test2fix.pdf
,
test2fix.pdf
test.pdf
Было бы грехом не проверять ваш большой PDF в конце концов. Хорошо, я подготовил еще один oneliner, чтобы играть с несжатыми PDF-файлами pdftk 1.44, чтобы перечислять потоки изображений и их начальные строки в файлах. Поэтому я начну с разжатия 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.pdf
и mytestuc.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 [email protected]:~/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-принтеру, и мое предыдущее предположение было также правильным.
Уф. Это исследование заняло некоторое время. Слово – это мусор.
Обходные?
Тем временем были даны некоторые предложения. Позвольте мне прокомментировать их.
Используя писателя с достойной поддержкой PDF, такой как LibreOffice (забыть об OpenOffice, он устарел сейчас), является хорошим решением, если некоторые неспособности не позволяют вам работать с ним.
Использование большего изображения в том же поле на странице также не так уж плохо, потому что даже после JPEG -измерения артефакты будут менее заметны.
Мой другой grosz, хотя использует JPEG с самого начала. Таким образом, Word не должен повторно сжимать его (вы никогда не знаете …), и вы можете обеспечить максимально возможное качество JPEG. Существует также сжатие JPEG без потерь. Разработчики из Редмонда предположили, что это не нужно, поэтому я не удивлюсь, если 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)
Я думаю, что по умолчанию Mitchell является хорошим для масштабирования, но если вы действительно хотите получить такое пиксельное изображение, тогда перейдите в Box, как предлагал @ceving. Конечно, первые 2 файла полезны, только если вы (по какой-то причине) используете поддельные PDF-принтеры.
Я загрузил все три файла.
Test-300dpi-mitchell.jpg (426 KB) test-300dpi-box.jpg (581 KB) test.jpg (74 KB)
Если моя гипотеза правильная, и Word не будет повторно сжимать изображение в формате JPEG, тогда просто используйте последний, не масштабируемый, и переходите со встроенным PDF-выходом, потому что он имеет меньше коротких замыканий (по крайней мере, он избегает ненужного масштабирования).
Откройте « Файл» > « Настройки» > « Дополнительно» , затем раздел « Размер и качество изображения», установите флажок « Не сжимайте изображения в файлах» (см. Экранный захват для ориентации, где находится этот параметр)
Следующее изображение – это одно и то же изображение в формате JPG (захват документа на 400% увеличен, чтобы показать разницу сглаживания), вставленный до и после активации этой опции:
Похоже, функция масштабирования Microsoft Word использует билинейную фильтрацию. Это не должно изменить изображение, но только то, как оно отображается при увеличении, отличном от 100%. То, что вы хотите, является масштабированием ближайшего соседа, но я сомневаюсь, что у MS Word есть опция для этого.
Я повторил манипуляции с вставкой Test.png в документ Word 2007 и нашел свое удивление, что результат зависит от используемого механизма.
Если вы используете Insert / Picture, изображение сглаживается.
Но если вы входите в редактор изображений и копируете, а затем вставляете в Word, изображение не сглаживается.
Другие возможные обходные пути:
- Попробуйте использовать Paste Special как растровое изображение Bitmap или Device независимо.
- Не вставляйте изображения. Используйте вкладку «Вставка» / «Иллюстрации» / «Изображение» и измените раскрывающуюся кнопку «Вставить» на «Ссылка на файл». Файл изображения может быть оптимизирован для того, чтобы Интернет занимал меньше места.
Вам нужно использовать Acrobat Distiller? Если нет, то я рекомендую вам попробовать использовать OpenOffice для создания PDF-файлов. Вы должны иметь возможность открыть исходный документ и экспортировать его относительно безболезненно ( Файл -> Экспорт в формате PDF … ). Я сделал быстрый тест, используя ваш сценарий, и окончательный PDF-файл меньше 50 КБ. Это было при сжатии без потерь, поэтому не было потери качества.
Единственный риск состоит в том, что документ может выглядеть несколько иначе при открытии OpenOffice, но я сомневаюсь, что любой экспортер Word to PDF идеален.
Это, вероятно, самое простое решение для масштабирования исходных изображений до 300 точек на дюйм или любого разрешения, которое вы используете во время экспорта PDF. Программа преобразования ImageMagick может сделать это, например.
Исходное изображение имеет ширину 176 пикселей. Если вы хотите масштабировать его до 4 дюймов при 300 dpi, ширина цели составляет 1200 пикселей. Это сделает это:
convert test.png -filter Box -resize 1200 test_300dpi.png
Я столкнулся с тем, что всегда лучше не мешать продуктам Microsoft думать о том, что может быть полезно для вас. Всегда лучше решать это самостоятельно.
Этот вопрос подобен этому
Он имеет отношение к стилю обертывания … устанавливает его только сверху и снизу. Читайте здесь .