Меню сайта
   Главная   
   Обо мне   
   Статьи   
   Дневник   
   Картинки   
   Файлы   
   Форум   
   Гостевая книга   

Категории раздела
Куклы и игрушки [60]
Личное [116]
Музыка [19]
Общее [304]
Японский язык [12]
ZX Spectrum [70]
Субмарины [98]
Настольные игры [34]
Го (碁) [11]
Книги [16]
Япония [26]
Таро [4]
Запертый шкаф [17]
CSA (КША) [15]
GNU/Linux [134]
Ubuntu [103]
Manjaro Linux [39]
Python [3]
Магнитольное [44]
Commodore64 [14]
Игровые приставки [2]


 
Дневник (2016 » Июнь » 23 в 02:20)
Ubuntu ImageMagick

Пришлось мне иметь дело на линуксе с рутинной обработкой большого количества слишком тяжелых для интернета изображений. Я решил воспользоваться для этих целей консольной утилитой ImageMagick, вот, что из этого получилось.

Хотя к ImageMagick имеется не только полная документация, но и решебник типовых задач, а для тех, кому shell-скрипты читать проще английского, — библиотека сценариев на shell, моё обсуждение конвертации jpg на форуме unixforum.org заняло несколько дней... Всё началось с того, что я прочитал на хабре статью "Эффективное изменение размера картинок при помощи ImageMagick".

Для начала, как используя ImageMagick можно вывести размеры картинки:
identify -ping -format '%w %h' image.jpg
Все файлы были в разнобойных именах, и с расширениями в разном регистре, что в линуксе критично. Переименовать все файлы IMAGE.JPG в image.jpg можно так:
prename 'y/A-Z/a-z/' *

Этого мне показалось мало, я хотел привести имена файлов к какому-либо общему знаменателю:

for file in *.jpg; do mv -bv "$file" "news-$(date -r "$file" +%Y%m%d-%H%M%S).jpg" ; done

Более оптимальный вариант переименования: (многострочные варианты применять в одну строку!)

declare -A tmu=(); for file in *.jpg; do ((tmu[$(date -r "$file" +%Y%m%d-%H%M%S)]++));
done; declare -A idx=(); for file in *.jpg; do name=$(date -r "$file" +%Y%m%d-%H%M%S);
if ((tmu[$name]!=1)); then ((idx[$name]++)); name=$(printf %s-%03d $name ${idx[$name]});
fi; mv -- "$file" "news-$name.jpg"; done


На выходе получаются файлы с датами в именах. Решение подсказали на форуме.

Хотя я замудохался возиться с утилитой в поисках лучшего результата, чем в GwenView на Ubuntu, или в ACDSee 5.0 в Win7, в итоге я ограничился этой конструкцией:

time mogrify -path resized -filter Triangle -define filter:support=2 -thumbnail "1300x1300>"
-dither None -quality 75 -define jpeg:fancy-upsampling=off -interlace None *.jpg

time - выводит затраченное на процесс время.

-filter Triangle билинейная интерполяция
-define filter:support=2 задать область соседних пикселей
-thumbnail 1400 размер картинки
-unsharp 0.25x0.08+8.3+0.045 этот фильтр увеличивает чёткость картинки, можно пренебречь.

-dither None Дизеринг (Dithering) – процесс, который смягчает последствия уменьшения количества цветов, добавляя шума в цветовые наборы, чтобы создать иллюзию большего количества цветов.

-posterize 136
Постеризация (posterization), когда градиенты заменяются на наборы из чётких цветов. Постеризация уменьшает количество уровней цвета. Сильно грузит процесс, с большими файлами может почти повесить ПК!

-quality 82 настройка качества jpg. В итоге я понизил до 75
-define jpeg:fancy-upsampling=off Эту настройку convert игнорирует, использовать mogrify! On - улучшает качество, но увеличивает вес.

-interlace none Прорисовывать последовательно, не прогрессивно!
-colorspace sRGB Даст неправильную цветопередачу если у нас в оригинале CMYK.


Настройки для PNG:

-define png:compression-filter=5
Фильтр сжатия, так сортирует данные, что сжатие становится
более эффективным.
-define png:compression-level=9 Максимальный уровень сжатия.
-define png:compression-strategy=1 Стратегия алгоритма
-define png:exclude-chunk=all Удалить мета данные


Полезные ссылки:
  1. ImageMagick конвертация pdf в jpg, png
  2. Поиск других записей в блоге:
    http://hermitlair.ucoz.com/search/?q=imagemagick
  3. Описание командной строки:
    https://www.imagemagick.org/script/command-line-processing.phpgeometry
  4. Обработка изображений с помощью ImageMagick
    http://ru-php.livejournal.com/1424646.html
  5. Описание ключей с примерами
    http://mydebianblog.blogspot.ru/2007/07/imagemagick.html
  6. Справка на help.ubuntu.ru
    http://help.ubuntu.ru/wiki/imagemagick
    http://help.ubuntu.ru/wiki/convert
  7. ImageMagick resize. Обрабатывать только большие картинки
    http://fstrange.ru/coder/about_all/imagemagick-resize-only-if-larger.html
    http://www.imagemagick.org/Usage/resize/
Категория: Ubuntu | Просмотров: 1266 | Добавил: harushima | Теги: bash, ImageMagick | Рейтинг: 0.0/0 |
Всего комментариев: 17.

23.06.2016 20:26
1 harushima
0  
Уязвима для атаки:
https://www.linux.org.ru/news/security/12568849
Сайт уязвимостей: https://imagetragick.com/


13.12.2016 02:55
2 harushima
0  
Авторотация упавших на бок изображений
jhead -autorot *.jpg


28.09.2019 04:26
3 harushima
0  
Конвертация из формата в формат с макс качеством:
mogrify -format jpg -quality 100 *.bmp


21.08.2020 11:02
5 harushima
0  
Пакетная обрезка изображений до указанной длины-ширины
find . -type f -name "*.jpg" -exec convert {} -crop 2153x3067 {} \;

http://najomi.org/_nix/imagemagick
http://www.imagemagick.org/Usage/crop/


08.09.2020 19:50
6 harushima
0  
В текущем каталоге пожать и уменьшить для блога все .JPG до 1300x1300:

time mogrify -path . -filter Triangle -define filter:support=2 -thumbnail "1300x1300>" -dither None -quality 75 -define jpeg:fancy-upsampling=off -interlace None *.JPG


14.01.2021 16:08
7 harushima
0  
Конвертация изображения в градации серого.
convert -colorspace "Gray" -level "60%,60%" file_in.jpg file_out.jpg

"60%,60%" это "уровень чёрного, уровень белого"

https://legacy.imagemagick.org/script....orspace
https://legacy.imagemagick.org/script/command-line-options.php#level


17.01.2021 01:55
8 harushima
0  
Изменить размер
convert -quality 100 -resize 500x500 "input.jpg" "output.png"
https://legacy.imagemagick.org/discourse-server/viewtopic.php?t=21324


21.01.2021 12:57
9 harushima
0  
Получить список утилит пакета imagemagick
yaourt -Ql imagemagick | grep /bin


02.02.2021 21:49
10 harushima
0  
Сконвертировать pdf в набор картинок png
и повернуть на 90° те из них, которые шире, чем выше.
(предполагается, что все они портретной ориентации)

pdfimages -png jvc_pc-w300-l-lb-ld_sm.pdf jvcpcw300-

for f in *.png; do set $(identify -format '%W %H' "$f"); if [ $1 -gt $2 ]; then mogrify -rotate 90 "$f"; fi; done


02.02.2021 22:21
11 harushima
0  
Примеры использования
ImageMagick v6 Examples --
Resize or Scaling (General Techniques)
https://legacy.imagemagick.org/Usage/distorts/#srt


05.02.2021 16:28
12 harushima
0  
Конвертировать pdf в jpg используя ghostscript
gs -dSAFER -dBATCH -dNOPAUSE -sDEVICE=jpeg -dJPEGQ=91 -r300 -sOutputFile="file-%03d.jpg" document.pdf

Конвертировать используя imagemagick
magick -density 300 document.pdf file.jpg

Использовать внутренюю логику для переворачивания изображений на 90°:
Где w>h — это ширина изображения больше его высоты.
for f in *.jpg; do { magick "$f" -rotate '%[fx:if(w>h,90,0)]' "$f"; } done

https://ghostscript.com/doc/current/Devices.htm


06.02.2021 04:29
13 harushima
0  
Градиентная полоска серого
convert -size 2x20 gradient: -scale 4000% gradient.png
https://legacy.imagemagick.org/Usage/canvas/


16.05.2021 02:17
14 harushima
0  
Склеить несколько изображений:
montage -mode concatenate -tile 2x2 -geometry +0+0 file-1-1.jpg file-1-2.jpg file-2-1.jpg file-2-2.jpg file-result.jpg

geometry +0+0 не добавит никаких границ и сохранит исходный размер каждого изображения. Но кажется и без него ок.


21.05.2021 00:53
15 harushima
0  
Подробная статистика об изображении:

convert MyImage.jpg -verbose info:

вывод определённых полей:
convert MyImage.jpg -format '%[standard-deviation], %[mean], %[max], %[min]' info:


03.11.2021 16:51
16 harushima
0  
mupdf-tools как бы imagemagick но с pdf


08.02.2022 03:53
17 harushima
0  
Повернуть на 90° все png в каталоге:

for file in *.png; do convert -rotate 90 "$file" rotated_"$file" ; done
for file in *.png; do convert -rotate 90 "$file" "$file" ; done

В целях защиты от спама, добавлять комментарии могут только зарегистрированные пользователи. Если Вы не хотите регистрироваться под своим именем, войдите под логином: anonymous, паролем: anonymous.   ( Регистрация,   Вход).
Авторизация
Анонимный вход:
anonymous / anonymous
Логин:
Пароль:

Календарь
«  Июнь 2016  »
ПнВтСрЧтПтСбВс
  12345
6789101112
13141516171819
20212223242526
27282930

Поиск

Облако тэгов
JGSDF игрушки Брюнетки Кладбище сайты Ярость Дракулы Древний Египет девушки кошки Cthulhu Вампиры Kitsune Ужас Аркхема инструмент комиксы Lovecraft готика Submarine submarine rc toy Hosting игротека Ужас Аркхэма book uboat мобильная связь го Edgar Poe swf Mansions of Madness Nightmares персоны Synergy linux-hardware bash youtube Storages Python Мастер-рукожоп Магнитофоны Entropy Grub2 loglevel WiFi Beeline ОПСОСЫ sharp939 Аудиокассеты Windows linuxwork Хочуны ImageMagick топБарыг C64c Commodore

Статистика
Яндекс.Метрика
Онлайн всего: 1
Гостей: 1
Пользователей: 0

Page QR code


Перепечатка материалов сайта без активной ссылки запрещена. Следить за RSS
(c) hermitlair.ucoz.com 2009-2024
Лучший браузер!
Блокировка рекламы