PNG 이미지의 투명도를 흰색 배경으로 바꿉니다.


294

투명도가있는 PNG 이미지가 있으며 이미지 레이어가 흰색 배경으로 구성된 버전을 만들어야합니다. Image Magick "convert"작업으로 다양한 작업을 시도했지만 아무 일도 일어나지 않거나 오류가 발생합니다. 아티팩트를 원하지 않기 때문에 중간 JPG 양식으로 가고 싶지 않습니다. 물론 Gimp 또는 Photoshop 등에서이 작업을 수행하는 것은 쉽지만 실제로는 명령 줄에서 스크립트를 작성하는 것이 좋습니다.

작동하지 않는 Image Magick 명령의 예는 다음과 같습니다.

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

오류가 발생합니다.

감사!


필자의 경우에는 (Apache) FO 프로세서를 통해 PDF / A를 만들 때 PNG의 투명도 레이어가 충돌했습니다. PDF / A는 투명성을 허용하지 않습니다. 내가 사용한 해킹은 대신 JPG로 전환하는 것입니다.
Wivani

3
"오류가 발생했습니다." 오류 메시지는 무엇입니까?
Aaron McDaid

그 명령은 잘 작동합니다. 그렇지 않은 경우 Imagemagick 또는 libpng의 버그가있는 설치가 있거나 버전이 너무 오래된 것일 수 있습니다. 사용중인 Imagemagick 및 libpng 버전은 무엇입니까?
fmw42

답변:


255

이것은 나를 위해 작동합니다 :

convert -flatten img1.png img1-white.png

문서 참조 :


3
어떻게 든 이것은 나를 위해 작동하지 않습니다 ... 나는 "투명한 흰색"을 시도했지만 예외 / 경고가 발생했습니다.
William Niu

1
-background를 흰색으로 설정해야한다는 것이 밝혀졌습니다. 또한 누락 된 colors.xml을 다운로드해야했습니다.
William Niu

9
아래에서 내 답변을 확인하십시오. 이것은 2 년 후에 추가되었습니다.
Rok Kralj

42
로 여러 페이지 문서를 변환 하지 마십시오-flatten . 페이지를 한 페이지로 병합합니다.
Tim S.

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.
josch

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

어떤 이유로 든 이것은 나를 위해 잘 작동했습니다. 원래 시도가 작동하지 않은 이유를 잘 모르겠습니다.
Anthony

23

나를 위해 일한 유일한 것은 모든 대답의 혼합이었습니다.

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

4
멋지다. 나는 실제로 흰색이 아닌 다른 색이 필요했고 흰색 ... -background "#010203" ...대신에 사용할 수 있습니다 .
Alexis Wilke

다음은 디렉토리의 모든 폴더에서 동일한 이미지를 바꾸는 방법입니다.mogrify -background white -flatten */*.png
Julian

-alpha remove나를 위해 무엇을했는지
Stefan Dragnev

13

디렉토리의 모든 폴더에서 동일한 이미지를 투명 대신 흰색으로 바꾸는 방법은 다음과 같습니다.

mogrify -background white -flatten */*.png


10

-flatten을 사용하면 작물을 자르고 크기를 조정하는 것이 효과가 없기 때문에 -flatten을 사용하면 완전히 화가났습니다. 공식 및 저에게 올바른 방법은 알파 채널을 "제거"하는 것입니다.

-alpha remove -alpha off (JPG에는 필요하지 않음)

설명서 참조 : http://www.imagemagick.org/Usage/masking/#remove


어떻게 명령이 될까요? 이것은 여기에서 작동하지 않았다 :convert imgWithTranspBkg.png -alpha remove -alpha off bkg.jpg resultImg.png
Aquarius Power

알파 만 제거하고 싶었습니다. JPG로 변환하면 훌륭하고 쉽습니다. 팁 고마워.
로저 CS 베르너 손

이것은 나를 위해 일한 위의 유일한 해결책입니다. 이제 iTunes 스토어가 내 이미지에 만족합니다.
Bill Cheswick

7

ImageMagick 사용 설명서알파 제거 섹션은 다음 과 같은 옵션 사용을 제안합니다 .-alpha remove

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

... -background선택한 색상을 사용합니다 .

가이드 상태 :

이 작업은 간단하고 빠르며 추가 메모리 사용이나 다른 투명도 제거 기술과 관련 될 수있는 다른 부작용없이 작업을 수행합니다. 따라서 이미지 투명도를 제거하는 데 선호되는 방법입니다.

메모를 추가합니다.

투명도를 '제거'하는 동안 알파 채널은 계속 켜져 있지만 완전히 불투명합니다. 알파 채널이 더 이상 필요하지 않으면 알파 끄기를 사용하여 알파 채널을 비활성화 할 수 있습니다.

따라서 알파 채널이 필요하지 않은 경우 다음 -alpha off과 같은 옵션 을 추가하여 출력 이미지 크기를 더 작게 만들 수 있습니다 .

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

이미지에서 투명도 제거 섹션에 설명 된 투명성을 제거하기 위해 자주 사용되는 다른 기술에 대한 자세한 내용이 있습니다 .

이 섹션에는 -flatten투명성을 제거하는 기술로 사용되는 중요한 경고에 대한 언급이 있습니다 .

그러나 기본적으로 "평평한"연산자는 여러 이미지를 단일 이미지로 병합하도록 설계 되었기 때문에 "mogrify"또는 여러 이미지 시퀀스에서는 작동하지 않습니다.

따라서 한 번에 여러 이미지를 변환하는 경우 (예 : PDF 파일에서 축소판 생성) -flatten원하는 작업을 수행하지 않습니다 (모든 페이지의 모든 이미지를 하나의 이미지로 병합합니다). 반면 -alpha remove에이 기술을 사용 하면 여전히 투명도가 제거 된 여러 이미지가 생성됩니다.


5

PNG ()에 대한 지원이 누락되어 문제가있을 수 있으므로 명령이 올바른 것 같습니다. convert -list configure다음을 확인 하거나 시도해보십시오.

sudo yum install libpng libpng-devel

1
예, 감사합니다. 이 (오래된) 문제는 "graphicks magick"의 버그로, "image magick"의 포크 / 다시 쓰기 / 무엇이든
Pointy

@Pointy 알겠습니다! 호기심으로 인해 문제의 실제 원인은 무엇입니까 (단 하나의 버전에서만)?
Alastair

글쎄, 난 정말 정확히 모른다; 그것은 단지 버그였습니다. 저는 Graphicks Magick의 관리자가 아니므로 코드에 대한 통찰력이 없습니다. 어떤 시점에서 다시 시도해야합니다.
Pointy

우분투가 없습니까? 여기 libpng12-0이지만 여전히 작동하지 않습니다 :(
Aquarius Power

libpng12-0설치되어 작동 하는 Ubuntu 13.04를 사용 하고 있습니다. 이것을 실행하면 png가 보입니까? convert -list configure | grep \png
Alastair

5

이것은 귀하의 질문에 대한 정확한 대답은 아니지만 알파 채널을 제거하는 방법을 알아 내려는 동안 귀하의 질문을 발견 했으므로 여기 에이 답변을 추가하기로 결정했습니다.

imagemagick를 사용하여 알파 채널을 제거하려면 다음 명령을 사용할 수 있습니다.

mogrify -alpha off ./*.png

3

Welp 그것은 "image magick"위에 "graphics magick"를 설치하기로 한 결정이 약간 거친 부분을 가지고 있습니다. 정품 crufty 오래된 "image magick"를 다시 설치할 때 위의 명령이 완벽하게 작동합니다.

오랜 시간 후에 edit — 요즘에는 "graphics magick"가이 문제를 해결했는지 확인할 것입니다.


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

명령 줄 이외의 옵션 : Windows 그림판에서 PNG 파일을 열고 저장을 클릭하십시오.


0

이것은 투명성을 가진 첫 번째를 두 번째 위에 놓는 이미지를 만듭니다.

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

원래이 게시물 에서 팁을 찾았 습니다


0

파일에서 알파 채널을 실제로 제거하려면 alpha off 옵션을 사용하십시오 .

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

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.