Як можна перетворити 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, навіть при такому ж розмірі він виглядає розмитим:

Зображення 4.png http://img803.imageshack.us/img803/9969/picture4at.png

Як можна перетворити PNG у PDF у високій якості?


Я сподіваюся, що ви знайдете хорошу відповідь на своє запитання, але я думаю, що це лише задана властивість PDF зберігати зображення у форматі JPG. PNG, як і той, який ви нам показуєте, має набагато кращу якість, ніж JPG.
jippie

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-дистилятор за замовчуванням може переводити растрові карти у форму DCT (він же JPEG), і їм потрібно сказати використовувати форму без втрат.
Warren Young

@cwd Ви думали про прийняття якоїсь відповіді? Я думаю , що відповідь user32208 є досить хорошою unix.stackexchange.com/a/64495/16920
Лео Леопольд Герц 준영

Відповіді:


34

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

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


Щільність, безумовно, є ключовою. Масштаб і щільність, здається, пов'язані із зворотним зв'язком, тому я граю з обома налаштуваннями, щоб отримати оптимальний результат як за зовнішнім виглядом, так і за розміром файлу ... Якщо є задана формула, я б хотів, щоб я знав це.
Брайан Z

Як знайти найкращий варіант щільності? Скільки втрачається даних 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
Тут найкраща відповідь IMHO, але ви повинні пояснити свою точку, тобто PDF може вбудовувати зображення JPEG 2000 без втрат. Таким чином, повна команда для OP буде що - щось на кшталт: convert sample.png -quality 0 sample.jp2; img2pdf -o sample.pdf sample.jp2. (Якщо припустити, що делегат JP2 доступний, звичайно: перевірка identify -list format | grep JP2.)
Немо

1
Якщо ви хочете дотримуватися стандартних сховищ на Ubuntu 14, convertвиконайте тиф та потім tiff2pdf.
Каміль Ґудсейне

Це чудова відповідь, дякую дуже і дуже.
Любомир Шайдарів

@ brian-z У вашій відповіді ви можете, будь ласка, пояснити аргумент -quality 0?
SebMa

SebMa, @Nemo додав цю команду, але я думаю, що це може бути -quality 100замість цього?
Брайан Z

14

Я майже впевнений, що ви сприймаєте як втрати якості у форматі PDF, це просто ефект вашого PDF глядач анти «s накладення функції.

Якщо ви використовуєте evinceдля перегляду PDF-файлу, ви можете бачити, що функція згладжування автоматично вимикається при певному масштабі (300% у моєму швидкому тесті). Ви можете це бачити яскраво, коли продовжуєте збільшувати масштаб - ви помітите, що в якийсь момент пікселі стають раптово чітко помітними. Це той момент, коли анти-згладжування повинно бути вимкнено, щоб дозволити точну перевірку зображення.


Хм - це має сенс, але, мабуть, я сподівався змогти якось встановити зображення і "початковий погляд" на 100%, щоб воно виглядало чіткішим.
cwd

1
@cwd Не помиліться масштабуванням (способом вивчення файлу) з фактичною причиною згладжування зображення: антизбудження . Зображення зберігається належним чином. Дуже переглядає PDF-файл. Але це може бути навпаки, навіть якщо ви взяли якісь інші програми для перегляду або змінили їх налаштування. Потім можна побачити різке зображення у PDF-файлі та згладжений файл PNG у засобі перегляду зображень.
rozcietrzewiacz

3

Брайан 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 також може бути растровим).


2

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


3
Нія більш висока щільність, безумовно, краща, тільки що зробив тест, 50 результатів у великій кількості дуже видимих ​​пікселів, 300 приємно і чітко виглядають.
shaunhusain

Це мене бентежить, але я думаю, що більша щільність призводить до виходу з меншою роздільною здатністю. Це означає, що якщо висновок нечіткий (перенапружений, як приклад в оригінальному запитанні), то нижча щільність - це те, що ви хочете. Але якщо PDF є піксельним, то вам потрібно конвертувати з більшою щільністю.
Брайан Z
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.