Квадратні ескізи з ImageMagick (конвертувати)?


Відповіді:


19

Це пояснюється в офіційній документації ImageMagick в розділі "Виріжте мініатюру, щоб відповідати" :

Альтернативою є замість того, щоб знімати зображення відповідно до конкретного розміру мініатюр, який ми хочемо, - це замість того, щоб вирізати частини зображення, які не відповідають кінцевому розміру.

Звичайно, це означає, що ви фактично втрачаєте частину оригінального зображення, зокрема краї зображення, але результат - збільшена мініатюра центральної частини зображення. Зазвичай це (але не завжди) основний предмет зображення, тому це практичний метод створення ескізів.

Згідно з IM v6.3.8-3, для спрощення цього було додано прапор спеціального параметра зміни розміру "^". Ми просто змінюємо розмір, використовуючи цей прапор, потім обрізаємо частини зображення, які переповнюють потрібний розмір.

І в контексті прикладної команди:

convert -define jpeg:size=200x200 hatching_orig.jpg  -thumbnail 100x100^ \
          -gravity center -extent 100x100  cut_to_fit.gif

7
Можливо ... якийсь тип опису?
Привіт71,

Я люблю
точні

55

Ігнасіо пов’язаний з правильною документацією, однак я вставлю його тут для зручності:

convert -define jpeg:size=200x200 original.jpeg  -thumbnail 100x100^ -gravity center -extent 100x100  thumbnail.jpeg

Точно так само і для GraphicsMagick:

gm convert -size 200x200 original.jpeg -thumbnail 100x100^ -gravity center -extent 100x100 +profile "*" thumbnail.jpeg

Пояснення:

  • -size 200x200 повідомляє декодер jpeg, нам потрібна лише ця роздільна здатність, щоб він міг економити пам'ять і швидше читати вихідне зображення
  • -thumbnail 100x100^ швидкий розмір, роблячи найкоротшу сторону 100
  • - gravity center централізуйте наступну операцію
  • -extent 100x100 нанесіть зображення на полотно розміром 100x100
  • +profile "*" не зберігайте метеранфо в jpeg (зменшуючи отримане зображення)

3
Коли я використовував його в командному рядку (графічний магічний один), я отримав зображення в центрі, два сидери заповнені білим кольором. Не той, про який йде мова. Я щось роблю не так?
Умут Бензер

2
Якщо ви використовуєте windows, ви повинні подвоїти символ ^, щоб уникнути цього. Напр .: -ситуація 100х100 ^^
Джордж Філіппакос

3
Чому б не розмір 100х100?
Привіт Світ

@HelloWorld: Прочитайте "Геометрію Imagemagick". Google це буде легко знайти.
saurabheights

11

Це простіший спосіб зробити це:

Наступна команда зменшить розмір меншої сторони до 100 пікселів і обріжте квадрат 100х100. Ви можете додати -stripкоманду для зменшення розміру файлу.

convert original.jpg -resize "100^>" -gravity center \ 
                     -crop 100x100+0+0 -strip thumbnail.jpg

На відміну від інших, він не намагається зберегти пам'ять. Натомість він робить те, що хочеш, і не більше. Плюс до цього, зображення не збільшуватиме масштаб.


Додаючи пізню відповідь на запитання із встановленими відповідями, корисно надати достатньо пояснень, чому ваша відповідь пропонує щось унікальне та нове порівняно з іншими відповідями.
Джейсон Аллер

2
Дякую, я не знаю, чому інші надмірно ускладнювали свої відповіді, намагаючись зберегти пам'ять, коли ОП взагалі нічого про це не згадує.
заплутався00

2

Я використовую graphicsmagick для створення мініатюр з точно розміром, але я прокладаю зображення шаховою дошкою, а не обрізаю навіс.

gm convert -limit Threads 1 -size 320x180 pattern:checkerboard -background transparent -gravity center -resize 320x180 -extent 320x180 original.jpg -flatten -resize 112x65! -interlace Line 1 thumb_112x65.jpg

Варіанти пояснені.

gm convert

// Single threaded seems faster on smaller files
-limit Threads 1 

// Generate a checkerboard of size 320x180.
// Sets the relative size of the checkerboard squares,
// also sets the desired aspect ratio. In my case (16:9)
-size 320x180 pattern:checkerboard 

// Resize the input image and center it on a transparent layer.
-background transparent -gravity center -resize 320x180 -extent 320x180 orig.jpg

// Merge the layers
-flatten 

// Resize the output to the desired
// The ! causes the aspect ratio to be ignored, fixing any rounding errors.
// (Specify a size with the same aspect ratio as the checkerboard.)
-resize 112x65! 

// Use Progressive JPEG Encoding
-interlace Line 

// Output Image
thumb_112x65.jpg

1

Я думаю, ти шукаєш щось на кшталт:

convert -crop 100x100+50+50 input_image.jpg output_image.jpg 

де 100x100є розмір кінцевого прямокутника і зміщення .50x50


Це обрізання зображення, але не створює ескіз.
marioosh

1
@marioosh: Я не зрозумів, ви можете використати convert -thumbnail 100x100+50+50 input_image.jpg output_image.jpgдля отримання додаткової інформації перевірити відповідь Ігансіо Васкеса для прикладу або перевірити документацію
pconcepcion

1

Цю команду обріжте на квадрат, а потім змініть розмір до 150x150

convert 824-full.jpg -set option:size '%[fx:min(w,h)]x%[fx:min(w,h)]' xc:none +swap -gravity center -composite -resize 150x150  temp.jpg

Додаткові параметри доступні тут: http://www.imagemagick.org/Usage/thumbnails/#square

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.