开发者

How to merge 4 images both vertically and horizontally

I have an array called imgarr which consists of 4 images in bytes. The image sizes are same but unknown. How can I merge it into the following format?

+----+----+
|img0|img1|
+----+----+
|img2|img3|
+----+----+

The output resolution should be 4 times the size of one imgarr image and no borders are needed.

EDIT: my code now:

from PIL import Image
import io
开发者_如何学运维
#convert bytes to image
for i in imgarr:
    stream = io.BytesIO(rimg)
    image = Image.open(stream).convert("RGBA").save("tempimg\\temp{}.png".format(i))
    stream.close()

img0 = Image.open("tempimg\\temp0.png")
img1 = Image.open("tempimg\\temp1.png")
img2 = Image.open("tempimg\\temp2.png")
img3 = Image.open("tempimg\\temp3.png")
image1_size = img0.size
new_image = Image.new('RGB',(2*image1_size[0], 2*image1_size[1]), (250,250,250))
new_image.paste(img0,(0,0))
new_image.paste(img1,(image1_size[0],0))
new_image.paste(img2,(0,image1_size[1]))
new_image.paste(img3, (image1_size[0],image1_size[1]))

new_image.save("tempimg\\temp.png")

but the output image is very weird.


Here's a simple 2x2 collage from the same photo.

from PIL import Image, ImageDraw

collage = Image.new("RGB", (1000,1000), color=(255,255,255))
photo = Image.open("23988930.jpg")
photo = photo.resize((500,500))
# paste images in 2x2 collage
collage.paste(photo, (0,0))
collage.paste(photo, (0,500))
collage.paste(photo, (500,0))
collage.paste(photo, (500,500))

collage.show()

In your case, all you need is to do is specify the starting point (top-left-corner) for each image in collage.

from PIL import Image, ImageDraw

photo = Image.open("23988930.jpg")
width, height = photo.size

collage = Image.new("RGB", (2*width,2*height), color=(255,255,255))
# paste images in 2x2 collage
collage.paste(photo, (0,0))
collage.paste(photo, (0,height))
collage.paste(photo, (width,0))
collage.paste(photo, (width,height))

collage.show()
0

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜