Преобразование файлов повторного изображения от JPEG до формата PDF

Попытайтесь установить GRUB2. Сам GRUB2 ничего не может решить (хотя он мог бы), но сам процесс установки может решить Вашу проблему. Как вознаграждение, Вы получаете последнюю и самую большую версию GRUB с любыми великолепными преимуществами, которые может повлечь за собой новая версия (и решение проблемы?)

54
24.01.2012, 19:49
12 ответов

В ударе:

for f in *.jpg; do
  convert ./"$f" ./"${f%.jpg}.pdf"
done
63
27.01.2020, 19:33
  • 1
    Какая-то конкретная причина, почему Вы предварительно ожидаете ". /" к args преобразования? Действительно ли это - общая хорошая практика? –  rahmu 24.01.2012, 12:46
  • 2
    @rahmu: да, это - хорошая практика, потому что начало имени файла - дайте проблемы, иначе. –  enzotib 24.01.2012, 12:48
  • 3
    Это работает, но mogrify намного меньше вводит. См. мой ответ. –  cjm 24.01.2012, 14:04
  • 4
    +1, потому что это технически корректно и избегает ловушек удара, но-1, потому что mogrify является Imagemagick путь к пакетным изображениям преобразования. Так никакое голосование от меня. путь –  Benoit 24.01.2012, 14:41
  • 5
    @aculich: спасибо за Ваш downvote, но Вы сделали неправильное соображение, видите, почему для цикла не повышает “аргумент слишком долго” ошибка?. –  enzotib 31.01.2012, 07:27

При использовании только файлов изображений, чем, возможно, требуется использовать Архив Комиксов (.cbr, .cbz, .cbt, .cba, .cb7)

  • Если Вы используете 7Z, затем переименовывают расширение файла (суффикс) к .cb7
  • Если Вы используете ACE, затем переименовывают расширение файла (суффикс) к .cba
  • Если Вы используете RAR, затем переименовывают расширение файла (суффикс) к .cbr
  • Если Вы используете TAR, затем переименовывают расширение файла (суффикс) к .cbt
  • Если Вы используете ZIP, затем переименовывают расширение файла (суффикс) к .cbz

Это намного более гибко, чем PDF.

Under Linux you can use software like Comix, Evince, Okular and QComicBook.

https://secure.wikimedia.org/wikipedia/en/wiki/Comic_book_archive

-1
27.01.2020, 19:33
  • 1
    downvoted, потому что это не имеет никакого отношения к вопросу OP. –  toogley 28.05.2016, 17:55

Крошечный сценарий добился бы цели. (протестированный с ksh88 на Солярисе 10)

script.ksh

#!/bin/ksh

[[ $# != 1 ]] && exit 255 # test for nr of args

pdfname=$(sed -e 's/\(.*\)\.jpg/\1\.pdf/' <(echo $"1")) #replace *.jpg with *.pdf
convert "$1" $pdfname

Затем можно работать find выполнить сценарий:

find dir -name image\*.jpg -exec /bin/ksh script.ksh {} \;

Отметьте это оба script.ksh и find команда, которую я дал Вам, мог бы иметь различные синтаксисы depeding на ОС и оболочке, которую Вы используете.

1
27.01.2020, 19:33
  • 1
    pdfname=${1%.*}.pdf заменяет расширение файла pdf. Тот метод намного более прост и работает, даже если имя файла содержит специальные символы. На связанной ноте добавьте двойные кавычки вокруг подстановок переменных. –  Gilles 'SO- stop being evil' 24.01.2012, 19:51
  • 2
    Нет никакой причины записать отдельный сценарий, когда он может все быть сделан на с простой единственной командной строкой. –  aculich 31.01.2012, 01:02

Вот путь, который комбинирует лучшее из вышеупомянутых предложений в простую, эффективную, устойчивую командную строку:

find /path/to/files -iname '*.jpg' -exec mogrify -format pdf {} +

Это хорошо работает с именами файлов, которые начинаются с a - или содержите пробелы. Отметьте использование -iname который является нечувствительной к регистру версией -name таким образом, это продолжит работать .JPG точно так же как .jpg.

Это использует find получить список файлов вместо оболочки globbing с *.jpg подстановочный знак, который может приводить к 'Списку аргументов слишком долго' ошибка в некоторых системах. Хотя как @enzotib точки в комментарии, поведение использования globbing в для цикла отличается, чем для аргументов команды.

Кроме того, find обработает подкаталоги, тогда как оболочка globbing не будет, если у Вас, окажется, не будет определенных для оболочки функций как **/*jpg рекурсивный globbing синтаксис в zsh.

Править: Я думал, что добавлю другую полезную опцию find то, что я думал после чтения комментария @IlmariKaronen о повторном выполнении команды и только преобразовании файлов, которые изменились начиная с первого показа.

На первичной обработке Вы можете touch файл метки времени после преобразования закончен.

find /path/to/files -iname '*.jpg' -exec mogrify -format pdf {} +; touch timestamp

Затем добавьте -newer timestamp к find выражение для работы на подмножество файлов, измененное в последний раз время которых является более новым, чем файл метки времени. Продолжите обновлять файл метки времени после каждого выполнения.

find /path/to/files -iname '*.jpg' -newer timestamp -exec mogrify -format pdf {} +; touch timestamp

Это - простой способ избежать необходимости обращаться к Make-файлу (если Вы уже не используете один), и это - другое серьезное основание, почему это стоит использовать find когда это возможно... это имеет универсальную выразительность, оставаясь кратким.

13
27.01.2020, 19:33
  • 1
    Используя ImageMagick для этого приводит к потере при перезаписи и низкой производительности. img2pdf в другом месте на этой странице избегает тех проблем. –  Robert Fleming 23.07.2016, 20:24

более быстрый но необычный синтаксис:

parallel convert '{} {.}.pdf' ::: *.jpg

Выполнения параллельно (использующий https://www.gnu.org/software/parallel/). Я не заметил многопоточности в convert все же, который ограничил бы эффективное распараллеливание. Если это - Ваше беспокойство, посмотрите в комментарии ниже, чтобы метод гарантировал, что никакая многопоточность не происходит.

24
27.01.2020, 19:33
  • 1
    Этот путь полон победы. Это автоматический оценивает базовое количество и выполнения что много задач! –  meawoppl 27.10.2013, 23:52
  • 2
    Этот метод является самым быстрым из всех. –  shivams 07.05.2015, 09:10
  • 3
    является питанием, параллель, объединенная с imagemagick, является супердержавой. Мне нравится супердержава. –  CousinCocaine 11.08.2015, 13:11
  • 4
    Немного поздно стороне здесь, но новый (возможно не, когда этот ответ был записан) версии ImageMagick являются многопоточными, и будут взаимодействовать плохо, если выполнено параллельно. Это может быть отключено (при использовании распараллеливания прикладного уровня такой в качестве с GNU parallel) путем установки переменной среды MAGICK_THREAD_LIMIT=1. –  zebediah49 04.09.2015, 06:58
  • 5
    Используя ImageMagick для этого приводит к потере при перезаписи и низкой производительности. img2pdf в другом месте на этой странице избегает тех проблем. –  Robert Fleming 23.07.2016, 20:24

Можно использовать mogrify команда для этого. Обычно, это изменяет оперативные файлы, но при преобразовании форматов, это пишет новый файл (просто изменяющий расширение для соответствия новому формату). Таким образом:

mogrify -format pdf -- *.jpg

(Как enzotib's ./*.jpg, -- препятствует тому, чтобы любые странные имена файлов были интерпретированы как переключатели. Большинство команд распознает -- означать "поиск остановки опций в этой точке".)

59
27.01.2020, 19:33
  • 1
    +1, мой ответ был только об ударе, не знают хорошо ImageMagick. –  enzotib 24.01.2012, 14:57
  • 2
    Хорошая идея использовать mogrify вместо convert. Это будет работать на 100 файлов, но использующий globbing с *.jpg не масштабируется в тысячи файлов; это может быть сделано путем объединения команды в простой остроте с find. –  aculich 31.01.2012, 01:08
  • 3
    Как преобразовать обоих *.jpg и *.png файлы к синглу *.pdf? Обратите внимание, что они - пронумерованные файлы (например, 1.jpg 2.png 3.png 4.jpg) и тот порядок должен быть поддержан/сохранен в выводе PDF. –  nutty about natty 21.07.2013, 10:40
  • 4
    как обходное решение: преобразование всех *.jpgв *.pngна шаге один, и выполнение эквивалента Вашего ответа на шаге 2... –  nutty about natty 21.07.2013, 10:46
  • 5

Я использовал следующий make-файл для чего-то подобного:

SVG = $(wildcard origs/*.svg)
PNG = $(patsubst origs/%.svg,%.png,$(SVG))

all: $(PNG)

%.png: origs/%.svg
    convert -resize "64x" $< $@


clean: 
    rm $(PNG)

Теперь я могу просто работать make и я получаю png файлы для каждого svg файла, который находится вокруг.

Править

Согласно просьбе:

  • подстановочные знаки генерируют список всего svgs в origs/
  • pathsubst берет этот список и производит список png имен файлов (другая папка и расширение. Пример: origs/foo.svg становится foo.png)
  • Правило 1: all: $(PNG) определяет, что цель "все" зависит от всего PNGs
  • Правило 2: %.png: origs/%.svg определяет, thethe $X.png файла зависит от origs/$X.svg и может быть сгенерирован путем вызова convert ... $< $@.
    • $< зависимость и и
    • $@ целевое имя
  • Правило 3: только для чистки
7
27.01.2020, 19:33
  • 1
    Для одноразовой задачи, создавая Make-файл, вероятно, излишество, но если Вы когда-нибудь планируете изменить некоторые PDFs, вводя make снова повторно преобразует их и только их, PDFs, которые изменились. принцип "качество на риск покупателя" –  Ilmari Karonen 24.01.2012, 22:04
  • 2
    Вы возражали бы для объяснения, каков подстановочный знак, origs, patsubst, как $ и % интерпретируются и $ <$? Остальное легко понять. :) –  user unknown 25.01.2012, 00:46
  • 3
    Обращение к make кажется немного сверхсложным, когда простая острота добьется цели. –  aculich 31.01.2012, 01:06
  • 4
    @IlmariKaronen я соглашаюсь, что Make-файл является излишеством, но хорошо иметь способ повторно преобразовать только подмножество измененных файлов на последующих выполнениях. Я обновил свой ответ со способом сделать это только с find таким образом, Вы не должны обращаться к Make-файлу. –  aculich 01.02.2012, 07:23

https://gitlab.mister-muffin.de/josch/img2pdf

Во всем вовлечении предлагаемых решений ImageMagick данные JPEG полностью декодируются и повторно закодировали. Это приводит к потере при перезаписи, а также производительности "десять - сотен" времен, хуже, чем img2pdf.

Может быть установлен с pip img2pdf если у Вас есть зависимости (например. apt-get install python python-pil python-setuptools libjpeg-dev или yum install python python-pillow python-setuptools).

16
27.01.2020, 19:33
  • 1
    является правильным. Можно протестировать это, распространение в прямом и обратном направлениях изменяет файл JPEG с командами как convert some.jpg -format pdf -compress jpeg generated.pdf ; pdfimages -j generated.pdf generated.pdf ; diff -sq some.jpg generated.pdf-000.jpg. По моему скромному мнению, этот ответ заслуживает большего количества upvotes. Действительно, convert сбои здесь, img2pdf проходит такой тест и даже включает много опций установить размер изображения, размер страницы, и т.д. подстроить сгенерированный PDF к Вашим потребностям. –  Stéphane Gourichon 21.07.2016, 10:14
  • 2
    img2pdf доступно в Ubuntu 16.04 обычные репозитории, никакая потребность в ручных операциях с pip там, и Вы сохраняете преимущество обновлений. –  Stéphane Gourichon 21.07.2016, 10:15
  • 3
    В то время, когда вопрос задали (и ответ принял), img2pdf, не существовал. Но в наше время img2pdf является ясно лучшим ответом. –  kmkaplan 19.01.2017, 16:58
[116806] Вы можете сделать это с помощью [117318] конвертировать [117319] напрямую. Это можно найти внизу ImageMagicks Site о [117320]Command Line Processing[117321].

9
27.01.2020, 19:33

Я получил решение с imagemagick для конвертации и parallel для ускорения процесса конвертации:

ls *.JPEG |parallel convert -density 200 -resize 496X646 -quality 100 {}  ../{.}.PDF
1
27.01.2020, 19:33

Утилита MacOS SIPS  В MacOS (Sierra) встроенная утилита командной строки Apple sipsобеспечивает полный доступ ко всем утилитам Apple для работы с растровыми изображениями; это включает преобразование jpgв pdf.

Например, из существующего изображения с низким разрешением/малого размера jpg'cat.jpg'(размером 8401 байт) следующая командная строка создает 'cat.pdf', без изменения растрового разрешения и минимального увеличения размера файла:

$ sips -s format pdf cat.jpg --out 'cat.pdf' 1>/dev/null 2>&1
$ ls -l cat.*
-rw-r--r--@ 1 <user redacted> <group redacted>  8401 Jun 18 07:06 cat.jpg
-rw-r--r--+ 1 <user redacted> <group redacted> 10193 Jun 18 07:22 cat.pdf

Преобразование в формат растрового изображения Adobe PSD Аналогичный sips Идиома создает файлы, совместимые с Adobe *.psd

$ sips -s format psd cat.jpg --out 'cat.psd' 1>/dev/null 2>&1
$ ls -l cat.jpg cat.psd
-rw-r--r--@ 1 Administration  staff    8401 Jun 18 07:06 cat.jpg
-rw-r--r--+ 1 Administration  staff  350252 Jun 18 07:37 cat.psd

Однако обратите внимание на 30-кратное увеличение размера файла, связанное с использованием растрового формата Adope psd.

Книжное производство  При крупномасштабном производстве книг, включающем сотни изображений, поставляемых в различных форматах, для меня удобной идиомой командной строки было использование утилит ImageMagickдля создания чистых файлы растровых изображений в формате png(с удаленными метаданными и цветовыми профилями), затем используйте sipsдля восстановления единого набора цветовых профилей и/или комментариев, и используйте sipsтакже для создания окончательных выходных файлов (чаще всего файлы *.png, *.psdили *.pdf).

1
27.01.2020, 19:33

Один из самых простых способов конвертировать несколько файлов — перейти в каталог файлов в терминале Linux и ввести:

$ convert *.png mypdf.pdf
1
27.01.2020, 19:33

Теги

Похожие вопросы