복붙노트

[PYTHON] PIL을 사용하여 투명한 png 이미지를 다른 이미지와 병합하는 방법

PYTHON

PIL을 사용하여 투명한 png 이미지를 다른 이미지와 병합하는 방법

투명 한 png 이미지 "foo.png"가 있습니다. 와 함께 다른 이미지를 열었습니다.

im = Image.open("foo2.png");

이제 내가 필요한 것은 foo.png와 foo2.png를 병합하는 것입니다.

(foo.png에 텍스트가 들어있어 foo2.png에 해당 텍스트를 인쇄하고 싶습니다.)

해결법

  1. ==============================

    1.

    import Image
    
    background = Image.open("test1.png")
    foreground = Image.open("test2.png")
    
    background.paste(foreground, (0, 0), foreground)
    background.show()
    

    .paste ()의 첫 번째 매개 변수는 붙여 넣을 이미지입니다. 두 번째는 좌표이고, 비밀 소스는 세 번째 매개 변수입니다. 이미지를 붙여 넣을 때 사용할 마스크를 나타냅니다. 투명도가있는 이미지를 전달하면 알파 채널이 마스크로 사용됩니다.

    문서를 확인하십시오.

  2. ==============================

    2.배경 이미지에 투명도가 포함되어 있으면 Image.paste가 예상대로 작동하지 않습니다. 실제 알파 합성을 사용해야합니다.

    배경 이미지에 투명도가 포함되어 있으면 Image.paste가 예상대로 작동하지 않습니다. 실제 알파 합성을 사용해야합니다.

    Pillow 2.0에는이 작업을 수행하는 alpha_composite 함수가 포함되어 있습니다.

    background = Image.open("test1.png")
    foreground = Image.open("test2.png")
    
    Image.alpha_composite(background, foreground).save("test3.png")
    

    편집 : 두 이미지는 RGBA 유형이어야합니다. 그래서 팔레트 화 된 경우 convert ( 'RGBA')를 호출해야합니다. 배경에 알파 채널이 없으면 일반 붙여 넣기 방법을 사용할 수 있습니다 (빠름).

  3. ==============================

    3.olt가 이미 지적했듯이, 소스와 대상 모두에 알파가 포함되어 있으면 Image.paste가 제대로 작동하지 않습니다.

    olt가 이미 지적했듯이, 소스와 대상 모두에 알파가 포함되어 있으면 Image.paste가 제대로 작동하지 않습니다.

    다음 시나리오를 고려하십시오.

    두 개의 테스트 이미지 모두 alpha를 포함합니다.

    layer1 = Image.open("layer1.png")
    layer2 = Image.open("layer2.png")
    

    다음과 같이 Image.paste를 사용하여 이미지 합성 :

    final1 = Image.new("RGBA", layer1.size)
    final1.paste(layer1, (0,0), layer1)
    final1.paste(layer2, (0,0), layer2)
    

    다음 이미지가 생성됩니다. 오버레이 된 빨간색 픽셀의 알파 부분은 두 번째 레이어에서 완전히 가져옵니다. 픽셀은 올바르게 혼합되지 않습니다.

    다음과 같이 Image.alpha_composite를 사용하여 이미지 합성 :

    final2 = Image.new("RGBA", layer1.size)
    final2 = Image.alpha_composite(final2, layer1)
    final2 = Image.alpha_composite(final2, layer2)
    

    다음 (올바른) 이미지를 생성합니다.

  4. ==============================

    4.블렌딩을 사용할 수도 있습니다.

    블렌딩을 사용할 수도 있습니다.

    im1 = Image.open("im1.png")
    im2 = Image.open("im2.png")
    blended = Image.blend(im1, im2, alpha=0.5)
    blended.save("blended.png")
    
  5. from https://stackoverflow.com/questions/5324647/how-to-merge-a-transparent-png-image-with-another-image-using-pil by cc-by-sa and MIT license