복붙노트

[PYTHON] Python Image Library : 4x4 이미지를 2x2 격자로 결합하는 방법은 무엇입니까?

PYTHON

Python Image Library : 4x4 이미지를 2x2 격자로 결합하는 방법은 무엇입니까?

4 개의 디렉토리에 애니메이션 이미지가 있습니다. 저는 일련의 이미지를 가져 와서 애니메이션의 각 프레임에 대해 2x2 격자로 배열 된 4 개의 이미지로 단일 이미지를 생성하고 싶습니다.

지금까지 내 코드는 다음과 같습니다.

import Image

fluid64 = "Fluid64_half_size/00"
fluid128 = "Fluid128_half_size/00"
fluid512 = "Fluid512_half_size/00" 
fluid1024 = "Fluid1024_half_size/00" 

out_image = "Fluid_all/00"

for pic in range(1, 26):
    blank_image = Image.open("blank.jpg")

    if pic < 10:
        image_num = "0"+str(pic)
    else:
        image_num = str(pic)

    image64 = Image.open(fluid64+image_num+".jpg")
    image128 = Image.open(fluid128+image_num+".jpg")
    image512 = Image.open(fluid512+image_num+".jpg")
    image1024 = Image.open(fluid1024+image_num+".jpg")
    out = out_image + image_num + ".jpg"

    blank_image.paste(image64, (0,0)).paste(fluid128, (400,0)).paste(fluid512, (0,300)).paste(fluid1024, (400,300)).save(out)

왜 작동하지 않는지 확실하지 않습니다. 오류가 발생합니다.

Traceback (most recent call last):
  File "C:\Users\Casey\Desktop\Image_composite.py", line 24, in <module>
    blank_image.paste(image64, (0,0)).paste(fluid128, (400,0)).paste(fluid512, (
ste(fluid1024, (400,300)).save(out)
AttributeError: 'NoneType' object has no attribute 'paste'
shell returned 1

어떤 도움이라도 굉장합니다. 감사!

해결법

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

    1.유일한 문제는 "붙여 넣기"가 이미지 객체를 반환하지 않는다는 것인데, 그 대신에 "빈"이미지를 수정합니다.

    유일한 문제는 "붙여 넣기"가 이미지 객체를 반환하지 않는다는 것인데, 그 대신에 "빈"이미지를 수정합니다.

    따라서 두 번째 붙여 넣기가 호출되면 (fuild128 이미지를 사용하는 경우) 첫 번째 이미지의 반환 값인 "없음"에 적용됩니다.

    그것이 유일한 문제인 경우 다음과 같이 한 줄에 하나의 붙여 넣기 호출을하십시오.

    blank_image.paste(image64, (0,0))
    blank_image.paste(fluid128, (400,0))
    blank_image.paste(fluid512, (0,300))
    blank_image.paste(fluid1024, (400,300))
    blank_image.save(out)
    

    가능성이 높지만 각 이미지의 크기를 조정하여 형식이 일치해야합니다. 그리고 "image_num"변수에 대한 코드는 필요 없습니다. 파이썬은 문자열에 정말 좋습니다 - 다음과 같이하십시오 :

    image64 = Image.open(fluid64 + "%02d.jpg" % pic)
    
  2. ==============================

    2.다음 행을 따라 무언가를 사용하고 싶을 수도 있습니다.

    다음 행을 따라 무언가를 사용하고 싶을 수도 있습니다.

    blank_image = Image.new("RGB", (800, 600))
    

    이렇게하면 이미지를 생성 할 수있는 메모리 영역이 새로 만들어집니다. 그러면 이미지를 붙여 넣을 수 있습니다.

    그런 다음 나중에 다시 저장해야합니다.

    blank_image.save("blank.jpg")
    
  3. ==============================

    3.오류 메시지 읽기 :

    오류 메시지 읽기 :

    AttributeError: 'NoneType' object has no attribute 'paste'
    

    즉, NoneType 유형 (즉, None 오브젝트)에 .paste를 호출하려고했음을 의미합니다.

    Image.paste는 없음을 반환합니다. 기능을 특별히 지원하도록 설계된 경우를 제외하고는 그러한 호출을 "연결"할 수 없으며 Image.paste는 지원하지 않습니다. (이런 종류의 지원은 함수 자체를 반환함으로써 이루어집니다. 아무 것도 반환하지 않기 때문에 NoneType에 대한 오류가 발생하고 명시 적으로 반환되는 항목이 없으면 Python의 모든 항목에서 기본적으로 None을 반환합니다.) Pythonic : 새로운 값을 반환하거나 self를 수정하고 None을 반환합니다. 따라서 함수에 부작용이있을 때 소위 말하는 "유창한 인터페이스"는 사용되지 않습니다. Pythonistas는 그 것을 유해하다고 생각합니다. Return None은 해당 함수에 부작용이 있다는 경고입니다. :)

    네 가지 .paste 호출 만하면됩니다.

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

    4.Image 객체를 반환하는 PIL API 복사, 자르기, 크기 조정 또는 회전과 달리 붙여 넣기는 없음을 반환하여 체인 된 메소드 호출을 방지합니다. 별로 편리하지 않은 API 디자인.

    Image 객체를 반환하는 PIL API 복사, 자르기, 크기 조정 또는 회전과 달리 붙여 넣기는 없음을 반환하여 체인 된 메소드 호출을 방지합니다. 별로 편리하지 않은 API 디자인.

  5. ==============================

    5.이 회신에 정의 된 append_images 함수를 사용하면 2x2 격자의 그림을 쉽게 타일링 할 수 있습니다. https://stackoverflow.com/a/46623632/8738113

    이 회신에 정의 된 append_images 함수를 사용하면 2x2 격자의 그림을 쉽게 타일링 할 수 있습니다. https://stackoverflow.com/a/46623632/8738113

    예 :

    img1 = append_images([image64, image128], direction='horizontal')
    img2 = append_images([image512, image1024], direction='horizontal')
    final = append_images([img1, img2], direction='vertical')
    final.save("Fluid_all/00.jpg")
    
  6. from https://stackoverflow.com/questions/4567409/python-image-library-how-to-combine-4-images-into-a-2-x-2-grid by cc-by-sa and MIT license