Как я могу преобразовать PNG в PDF в высоком качестве, чтобы он не был размытым или размытым?

54

Существует много вопросов о том, как преобразовать PDF-файл в изображение PNG, но я хочу взять хороший резкий PNG-файл и просто обернуть его или встроить в PDF-файл, не делая его размытым или нечеткая.

Я понимаю, с установленным imagemagic я могу сделать простое преобразование, как:

convert sample.png sample.pdf

Я также попробовал много переключателей, чтобы установить глубину, а также настройку качества:

convert -quality 100 sample.png sample.pdf

Однако PDF все еще выглядит размытым / нечетким.

Вот пример изображения:

http://img406.imageshack.us/img406/6461/picture3mu.png

Как png, он свежий и чистый. Когда я конвертирую его в PDF, даже при том же размере он выглядит размытым:

Picture 4.png http://img803.imageshack.us/img803/9969/picture4at.png

Как я могу конвертировать PNG в PDF в высоком качестве?

УХО
источник
Я надеюсь, что вы найдете хороший ответ на свой вопрос, но я думаю, что это просто заданное свойство PDF для хранения изображений в формате JPG. PNG, как и тот, который вы нам показываете, имеет гораздо лучшее качество, чем JPG.
Джиппи
1
@cwd: Вы пытались поместить его в файл .tex, а затем создать PDF? С \usepackage[pdftex, final]{graphicx}и \includegraphics[width=516px]{calendar.png}, например.
Эмануэль Берг
2
@jippie: Нет, PDF может хранить растровые изображения без потерь . Ссылка дает список алгоритмов сжатия, а не форматов, потому что растровые данные внутри PDF не могут быть извлечены и просмотрены непосредственно в формате JPEG или TIFF, но вы не ошибетесь, если скажете, что изображения PDF либо JPEG (с потерями) ), JPEG 2000 (также с потерями) или любой из нескольких вариантов TIFF (без потерь). Что это верно, однако, является то , что данный PDF дистиллятор может по умолчанию переводящих растровых изображений в ДКП (он же JPEG) форму, и должен быть сказал , чтобы использовать форму без потерь вместо этого.
Уоррен Янг
@cwd Думали ли вы принять какой-нибудь ответ? Я думаю, что user32208 довольно хороший ответ unix.stackexchange.com/a/64495/16920
Лео Леопольд Херц 준영

Ответы:

34

Попробуйте использовать -densityопцию. Разрешение по умолчанию составляет 72 точки на дюйм. Так что попробуйте что-то вроде -density 300.

Для справки см. -densityДокументацию по параметрам командной строки ImageMagick.

user32208
источник
Плотность определенно является ключевым. Масштаб и плотность, похоже, обратно пропорциональны, поэтому я играл с обоими настройками, чтобы получить оптимальный результат с точки зрения как внешнего вида, так и размера файла ... Если есть заданная формула, я бы хотел ее знать.
Брайан З
Как найти лучший вариант плотности? Сколько данных теряется with density 300с любым примером изображения? Я думаю, что результат зависит от ввода. Новая ветка об этом здесь unix.stackexchange.com/q/292025/16920
Лео Леопольд Герц 준영
это не меняет качество для меня.
Гийом Шевалье
19

Получить хороший вывод в формате PDF может быть очень сложно convert. Попробуй img2pdfвместо этого. Из readme:

Преобразование изображений без потерь в PDF без излишнего перекодирования файлов JPEG и JPEG2000. Таким образом, нет потери качества и нет ненужного большого выходного файла.

Для пояснения: PDF может встраивать изображения JPEG 2000 без потерь (и большинство читателей, кажется, поддерживают их ). Так что это преобразование полностью без потерь:

convert sample.png -quality 0 sample.jp2
img2pdf -o sample.pdf sample.jp2

(Если, конечно, доступен делегат JP2: проверьте identify -list format | grep JP2.)

Брайан З
источник
4
Это ИМХО лучший ответ здесь, но вы должны лучше объяснить свою точку зрения, то есть, что PDF может включать изображения JPEG 2000 без потерь. Таким образом, полная команда для OP будет что - то вроде: convert sample.png -quality 0 sample.jp2; img2pdf -o sample.pdf sample.jp2. (Предполагается, что делегат JP2 доступен, конечно: проверьте identify -list format | grep JP2.)
Nemo
1
Если вы хотите придерживаться стандартных репозиториев на Ubuntu 14, convertнажмите и затем tiff2pdf.
Камиль Гудесюн
Это отличный ответ, большое спасибо.
Любомир Шайдаров
@ brian-z В своем ответе вы можете объяснить аргумент -quality 0?
SebMa
SebMa, @Nemo добавил эту команду, но я думаю, что может быть -quality 100вместо этого?
Брайан З.
14

Я почти уверен, что вы воспринимаете как потери качества в формате PDF, это просто эффект вашего PDF просмотрщик «s анти - сглаживание функций.

Если вы используете evinceдля просмотра PDF, вы можете увидеть, что функция сглаживания автоматически отключается при определенном увеличении (300% в моем быстром тесте). Вы можете ясно видеть это, когда продолжаете увеличивать изображение - вы заметите, что в какой-то момент пиксели внезапно становятся четко видимыми. Это тот момент, когда сглаживание должно быть отключено, чтобы обеспечить точную проверку изображения.

rozcietrzewiacz
источник
Хм - это имеет смысл, но я думаю, я надеялся, что смогу каким-то образом установить изображение и «начальный вид» на 100%, чтобы оно выглядело более четким.
cwd
1
@cwd Не путайте масштабирование (способ проверки файла) с реальной причиной сглаживания изображения: сглаживание . Изображение хранится правильно. Это программа для просмотра PDF, которая обманывает вас. Но это может быть и наоборот, если вы захотите использовать другие приложения для просмотра или изменить их настройки. Затем вы можете увидеть четкое изображение в файле PDF и сглаженный файл PNG в средстве просмотра изображений.
rozcietrzewiacz
3

Brian Z выше предоставил следующий, который является правильным, полностью обратимым и без потерь (при условии, что шаг конвертации фактически без потерь, что, я думаю, является или, по крайней мере, должно быть) способ поместить png в pdf. Вы должны конвертировать из png в jp2 без потерь, чтобы соответствовать структуре PDF / ридерам (я думаю).

$ convert sample.png -quality 0 sample.jp2
$ img2pdf -o sample.pdf sample.jp2

Однако стоит отметить, что сами файлы .png можно предоставить непосредственно в img2pdf, например:

$ img2pdf -o sample.pdf sample-page1.png <sample-page2.png ...>

Это создаст наименьший pdf-файл и вставит необработанный гекс png в объекты в pdf без потерь *.

* Недостаток в том, что этот процесс необратим в отличие от использования jp2. Данные заголовка / нижнего колонтитула и и заголовка / нижнего колонтитула фрагмента были удалены (что фактически делает файлы еще меньше!) Из вставляемого png, оставляя только необработанные данные изображения (удаленные метаданные интегрированы в структуру pdf), предположительно для "взлома" PDF-файла для отображения необработанного png, который технически не соответствует контейнеру. Он хорошо отображает в Firefox и может отображать хорошо во всех современных читателях, но если png не соответствует контейнеру, то строгие читатели могут не отображать необработанные данные png (так как они не должны ожидать, что они обрабатывают / обрабатывают правильно).

Здесь вы можете найти чрезвычайно сырой bash-скрипт, который работал для меня, чтобы извлечь и восстановить файлы png с соответствующими хэшами, используемыми для ввода в pdf. https://github.com/jack4455667788/RebuildRawPNGExtractedFromPDF

Джек Хэдли
источник
2

PDF - векторный формат (т. Е. Файл содержит описание линий для рисования), в то время как другие форматы (JPG, PNG) - это растровые форматы (файл описывает, какой цвет рисовать для каждого пикселя). Если вы взорвете PDF, это все еще только резкие линии; JPG и PNG показывают пикселизацию.

(Хорошо, хорошо, я соврал. PDF также может быть растром).

vonbrand
источник
2

Я думаю, что для параметра png-to-pdf -densityдолжен быть маленький, а не большой. Вы можете попробовать что-то вродеconvert -quality 100 -density 50

user39384
источник
3
Нет, более высокая плотность определенно лучше, только что провела тестирование, 50 результатов с большим количеством очень видимых пикселей, 300 - это красиво и четко.
shaunhusain
Это меня смущает, но я думаю, что более высокая плотность приводит к выходу с более низким разрешением. Это означает, что если результат нечеткий (с чрезмерным наложением, как в примере из исходного вопроса), то вам нужна более низкая плотность. Но если PDF имеет пиксельное форматирование, тогда вам действительно нужно конвертировать с большей плотностью.
Брайан З.