Замініть прозорість у зображеннях PNG білим тлом


293

У мене є якісь зображення PNG з прозорістю, і мені потрібно створити версії із шаром зображення, складеним на білому тлі. Я спробував різні речі з "конвертувати" операціями Image Magick, але або взагалі нічого не відбувається, або я отримую помилку. Я не хочу переходити до проміжної форми JPG, тому що не хочу артефактів. Звичайно, це легко зробити в Gimp або Photoshop або будь-якому іншому, але я б краще за все це записати з командного рядка, оскільки таких речей багато.

Прикладом непрацюючої команди Image Magick є:

convert img1.png -background white -flatten img1-white.png

Це призводить до помилки.

Дякую!


У моєму конкретному випадку рівень прозорості в PNG конфліктував під час переходу через процесор (Apache) FO для створення PDF / A. PDF / A не дозволяє прозорість. Хак, який я використав, - це звернутися до JPG.
Wivani

3
"Це призводить до помилки." Що таке повідомлення про помилку?
Аарон Мак-Дейд

Ця команда повинна добре працювати. Якщо цього немає, можливо, у вас є помилкова установка Imagemagick або libpng, або ваші версії будь-яких занадто старих. Яка ваша версія Imagemagick та libpng?
fmw42

Відповіді:


254

Це працює для мене:

convert -flatten img1.png img1-white.png

Довідкові документи:


3
Якось це не працює для мене ... Я спробував "прозорий білий колір", але отримав виняток / попередження.
Вільям Ніу

1
Виявляється, мені також потрібно встановити -background на білий. Мені також довелося завантажити кольори.xml, яких не було.
Вільям Ніу

9
Перевірте мою відповідь нижче. Він був доданий через 2 роки після цього.
Rok Kralj

42
НЕ намагайтеся конвертувати багатосторінкові документи за допомогою -flatten. Це згладить сторінки в одну сторінку.
Тім С.

8
Якщо ви хочете зробити це у всіх файлах зі своєї папки, ви можете зробити це так: про mogrify -flatten *.pngвсяк випадок не забудьте зробити резервну копію. Більше інформації тут: imagemagick.org/script/mogrify.php
troyane

372
-background white -alpha remove -alpha off

Приклад:

convert image.png -background white -alpha remove -alpha off white.png

Не соромтеся замінювати whiteбудь-який інший колір, який хочете. Документація Imagemagick говорить про це -alpha remove:

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


3
Здається, -background whiteце не потрібно (все ж, мабуть, це стосується інших кольорів).
Skippy le Grand Gourou

5
@SkippyleGrandGourou: Це потрібно, оскільки колір резервного прозорості для PNG не завжди білий.
Rok Kralj

3
краще, ніж прийнята відповідь (яка у випадку, якщо більш ніж один шар не робить правильно)
axkibe

5
Отримане зображення все ще матиме альфа-канал. Це буде порожньо, але все одно буде. Щоб повністю видалити канал, додайте -alpha off.
Джош

2
Не працює. Я зробив новий PNG з прозорим фоном і червоною крапкою посередині. Завжди випускався чорний фон, незалежно від того, який колір я вказав. convert image.png -background white -alpha off white.pngстворив зображення з чорним фоном. convert image.png -background "#00ff33" -alpha off 00ff33.pngстворив чорний фон
McNulty

46

Згладжування зображення та нанесення фонового зображення прямо в ImageMagick

Однак порядок команд дуже важливий

Щоб застосувати будь-який фон до прозорого зображення і вирівняти його, спочатку застосуйте фон, ніж вирівняйте. Реверс не працює.

$ convert sourceimage.png -background BackgroundColor -flatten destinationimage.png

З будь-якої причини це добре працювало для мене. Не впевнений, чому ваша первісна спроба не спрацювала.
Ентоні

23

Єдине, що працювало для мене, - це поєднання всіх відповідей:

convert in.png -background white -alpha remove -flatten -alpha off out.png

4
Класно, що спрацювало. Насправді мені потрібен був інший колір, ніж білий, і ви можете використовувати ... -background "#010203" ...замість білого.
Алексіс Вільке

ось як замінити одне і те ж зображення у всіх папках у каталозіmogrify -background white -flatten */*.png
Julian

-alpha removeбуло що для мене це
Стефан Драгнев

13

ось як замінити одне і те ж зображення у всіх папках у каталозі на біле, а не на прозоре:

mogrify -background white -flatten */*.png


10

Використання -flatten змусило мене повністю злитися, оскільки -flatten у поєднанні з врожаєм врожаю та зміною розміру просто не працює. Офіційний і для мене єдино правильний спосіб - це "видалення" альфа-каналу.

-alpha Remove -alpha вимкнено (не потрібно для JPG)

Дивіться документацію: http://www.imagemagick.org/Usage/masking/#remove


так як би стати командою? це не спрацювало тут:convert imgWithTranspBkg.png -alpha remove -alpha off bkg.jpg resultImg.png
Водолій Сила

Я хотів лише видалити альфу. Перетворити в JPG це було добре, легко і просто. Дякую за пораду.
Roger CS Wernersson

Це єдине рішення вищезазначеного, яке працювало для мене. Тепер магазин iTunes задоволений моїм образом.
Білл Чесвік

7

Розділ Alpha Remove у Посібнику з використання ImageMagick пропонує використовувати -alpha removeпараметр, наприклад:

convert in.png  -background white  -alpha remove  out.png

... за допомогою -background обраний вами колір.

У посібнику зазначено:

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

Це додатково додає примітку:

Зауважте, що поки прозорість буде "знята", альфа-канал залишатиметься увімкненим, але тепер буде повністю непрозорим. Якщо вам більше не потрібен альфа-канал, ви можете використовувати Alpha Off для його відключення.

Таким чином, якщо вам не потрібен альфа-канал, ви можете зменшити розмір вихідного зображення, додавши -alpha offпараметр, наприклад:

convert in.png  -background white  -alpha remove  -alpha off  out.png

Детальніше про інші, часто використовувані методи видалення прозорості, описані в розділі Видалення прозорості із зображень .

У цьому розділі згадується важливий застереження щодо використання -flattenяк техніки для зняття прозорості:

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

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


5

Здається, що ваша команда правильна, тому проблема може бути пов'язана з відсутністю підтримки PNG (). Ви можете перевірити convert -list configureабо просто спробувати наступне:

sudo yum install libpng libpng-devel

1
Так дякую; ця (стара) проблема була помилкою у "graphicks magick", що є форк / переписати / що б то не було "image magic".
Pointy

@Pointy я бачу! З цікавості, що було фактичною причиною проблеми (це було лише в одній версії)?
Аластер

Ну я насправді точно не знаю; це була просто помилка. Я не підтримую Graphicks Magick, тому я не маю уявлення про їх код. Мені потрібно спробувати ще раз в певний момент.
Pointy

ubuntu його не має? ось libpng12-0, але все ще не працює :(
Сила Водолія

Я використовую Ubuntu 13.04 із libpng12-0встановленою та робочою. Чи можете ви побачити png, якщо це запустити? convert -list configure | grep \png
Аластер

5

Це не зовсім відповідь на ваше запитання, але я знайшов ваше питання, намагаючись зрозуміти, як видалити альфа-канал, тому я вирішив додати цю відповідь тут:

Якщо ви хочете видалити альфа-канал за допомогою Imagemagick, ви можете скористатися цією командою:

mogrify -alpha off ./*.png

3

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

редагувати , через довгий час - Днями я перевірю, чи "графічна магія" виправила цю проблему.


2

Мені потрібно було або: і -alpha backgroundі -flatten, або -fill.

Я зробив новий PNG з прозорим фоном і червоною крапкою посередині.

convert image.png -background green -alpha off green.png не вдалося: він створив зображення з чорним фоном

convert image.png -background green -alpha background -flatten green.png створив зображення з правильним зеленим фоном.

Звичайно, з іншим файлом, який я перейменував image.png, нічого не вдалося зробити. Для цього файлу я виявив, що колір прозорих пікселів "# d5d5d5", тому я заповнив цей колір зеленим:

convert image.png -fill green -opaque "#d5d5d5" green.png прозорі пікселі замінили правильним зеленим.


власне команда з поточним ImageMagick буде convert image.png -background green -alpha background -alpha off green.pngабо convert image.png -background green -alpha background -alpha remove green.pngабо convert image.png -background green -flatten green.png
fmw42

1

Параметр без командного рядка: відкрийте файл PNG у програмі Windows Paint та натисніть кнопку Зберегти.


0

це створює зображення просто розміщуючи 1-ю з прозорістю поверх другої

composite -gravity center ImgWithTransp.png BackgroundSameSizeOfImg.png ResultImg.png

спочатку знайшов підказку в цій публікації


0

Щоб фактично видалити альфа-канал із файлу, використовуйте параметр альфа-вимкнення :

convert in.png -background white -alpha off out.png

1
Насправді, надане вами посилання говорить: "Це фактично не видаляє і не призначає альфа-канал, приєднаний до зображення, він просто вимикає будь-який вплив каналу на зображення". Щоб дійсно видалити альфа-канал, дивіться мою відповідь.
Rok Kralj

0

Я побачив це запитання та відповіді, які мені справді допомагають, але тоді мені потрібно було зробити це для багатьох файлів, тому у випадку, якщо у вас є кілька зображень (зображень PNG) в одній папці, і ви хочете зробити це для всіх:

find ./ -name "*.png" -exec convert {} -flatten {} \;

-1

Це -алфа відключена, НЕ -алфа видалення! Завантаження додатка в iOS в магазині не вдається, коли в будь-якому значку є альфа-канал !!

Ось як це зробити: mogrify -alpha off * .png

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