Як змінити розмір полотна PNG за допомогою ImageMagick (GraphicsMagick)? (Як прокладати прозорість?)


9

Як варіант: Як мені взяти неквадратичний PNG і "заповнити" решту "зображення прозорістю, щоб отримане квадратне зображення отримало оригінальне зображення з центром у квадраті?

УЗАГАЛЬНО, що я хочу - сфотографувати будь-яке зображення будь-якого формату, підтримуваного GM будь-якого розміру, і створити зменшений PNG (скажімо, максимум 40 пікселів для будь-якого виміру), з підтримкою співвідношення сторін, з прозорістю для не квадратних оригінальні зображення І з уже нанесеною маскою прозорості PNG 40x40.

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

Бажана одна команда; прийнятний багатокомандний ланцюг.

(редагувати)

Додаткова інформація: Ось складена команда, яку я використовую:

gm composite -compose copyopacity mask.png source-and-target.png source-and-target.png

де mask.png має білі пікселі для того, що я хочу зберегти source-and-target.png та прозорі пікселі, для чого я хочу видалити (і стати прозорим) izvor-and-target.png.

Відповіді:


7

Ця команда візьме будь-який розмір вхідного файлу і найкраще розмістить його в квадраті 40х40 та прозорості:

convert \
   original.png \
  -thumbnail '40x40>' \
  -background transparent \
  -gravity center \
  -extent 40x40 \
  -compose Copy_Opacity \
  -composite mask.png \
   original-resized.png

Цей gravityпараметр забезпечує зображення в центрі зображення в обох напрямках і transparentвикористовується там, де немає пікселів. Потім композиція проводиться за допомогоюmask.png


Тож ми не можемо це зробити за один знімок composite?
Пістос

@Pistos Мені не ясно, що ви робите з композитом - це просто маска прозорості, щоб приховати / показати частини ескізів після зміни розміру? Чи можете ви відредагувати та додати послідовність команд, яку ви мали досі, щоб ми побачили, чи можна її поєднувати?
Павло

@ Pistos Я думаю, що найкращим підходом є композиція з -конвертувати, а не навпаки. Я оновив свою відповідь вище.
Павло

Близько, але не зовсім. Ваша команда не працювала так, як є, і навіть з коригуваннями вона не працювала. Це добре, я зроблю це в два кроки. Я оновлю тут речі після отримання останніх, робочих кроків CLI. Знову дякую.
Пістос

Я хотів би додати -filter Catromцю thumbnailопцію, тому що, з мого досвіду, вона, як правило, створює зображення більш високої якості.
thoan

6

Одна команда для перетворення всіх PNG з однієї папки:

mogrify \
 -resize 50x50 \
 -background transparent \
 -gravity center \
 -extent 50x50 \
 -format png \
 -path resized \
 *.png

mogrify - команда з пакету ImageMagick. Спочатку потрібно створити вихідний каталог.


Хороший. До речі, якщо ви відчуваєте пригоди, можете пропустити -path resizedредагування файлів на місці.
aaronk6

Це чудово. На моїй установці (OSX, 1.3.35) , це gm mogrifyі замість того -path resized, використання-create-directories -output-directory resized
Blake

1

Ось з чим я врешті пішов. Двоетапний процес:

gm convert \
  -thumbnail '40x40>' \
  -background transparent \
  -gravity center \
  -extent 40x40 \
   original.png \
   intermediate.png

gm composite \
  -compose in \
   intermediate.png \
   mask.png \
   out.png

Де mask.png - це білі пікселі для того, що я хотів зберегти, і прозорі пікселі для того, що я хотів замаскувати (відкинути).

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