Python 用PIL制作拼贴
我是。卡住了 我已经为此工作了一个多星期了,我似乎无法让我的代码正确运行。作为一个整体,我对PIL和Python是相当陌生的。我正在尝试将一些图片拼贴成2x3。下面列出了我的代码。我正在尝试让我的照片适合新创建的拼贴中没有任何访问的黑色空间,但是当我运行代码时,我只能得到2张图片放在拼贴中,而不是我想要的6张。任何建议都会有帮助 *代码已编辑Python 用PIL制作拼贴,python,image,python-imaging-library,copy-paste,Python,Image,Python Imaging Library,Copy Paste,我是。卡住了 我已经为此工作了一个多星期了,我似乎无法让我的代码正确运行。作为一个整体,我对PIL和Python是相当陌生的。我正在尝试将一些图片拼贴成2x3。下面列出了我的代码。我正在尝试让我的照片适合新创建的拼贴中没有任何访问的黑色空间,但是当我运行代码时,我只能得到2张图片放在拼贴中,而不是我想要的6张。任何建议都会有帮助 *代码已编辑 from PIL import Image im= Image.open('Tulips.jpg') out=im.convert("RGB",
from PIL import Image
im= Image.open('Tulips.jpg')
out=im.convert("RGB", (
0.412453, 0.357580, 0.180423, 0,
0.212671, 0.715160, 0.072169, 0,
0.019334, 0.119193, 0.950227, 0 ))
out.save("Image2" + ".jpg")
out2=im.convert("RGB", (
0.9756324, 0.154789, 0.180423, 0,
0.212671, 0.715160, 0.254783, 0,
0.123456, 0.119193, 0.950227, 0 ))
out2.save("Image3" + ".jpg")
out3= im.convert("1")
out3.save("Image4"+".jpg")
out4=im.convert("RGB", (
0.986542, 0.154789, 0.756231, 0,
0.212671, 0.715160, 0.254783, 0,
0.123456, 0.119193, 0.112348, 0 ))
out4.save("Image5" + ".jpg")
out5=Image.blend(im, out4, 0.5)
out5.save("Image6" + ".jpg")
listofimages=['Tulips.jpg', 'Image2.jpg', 'Image3.jpg', 'Image4.jpg', 'Image5.jpg', 'Image6.jpg']
def create_collage(width, height, listofimages):
Picturewidth=width//3
Pictureheight=height//2
size=Picturewidth, Pictureheight
new_im=Image.new('RGB', (450, 300))
for p in listofimages:
Image.open(p)
for col in range(0,width):
for row in range(0, height):
image=Image.eval(p, lambda x: x+(col+row)/30)
new_im.paste(p, (col,row))
new_im.save("Collage"+".jpg")
create_collage(450,300,listofimages)
这里有一些工作代码
Image.open(p)
时,返回一个Image对象,因此需要将than存储在变量中:im=Image.open(p)
size
是缩略图的大小,但您没有使用该变量。打开图像后,应将其大小调整为大小
im
,绘制缩略图并将其放入ims
列表中i、
x和
y`变量以跟踪我们正在查看的图像,并初始化x和y坐标以将缩略图粘贴到更大的画布中。它们将在下一个循环中更新cols
),而不是像素(width
)。(还有range(0,thing)
的作用与range(thing)
相同)ims[i]
处的当前图像粘贴到x,y
处的大new\u im
中。这些是像素位置,而不是行/列位置i
计数器,并将缩略图高度添加到y
thumnnail_width
添加到x
并将y
重置为零new\u im
“Image2”+“.jpg”
等,只需连接“Image2.jpg”listofimages
中,而是将图像直接放在那里:listofimages=[im、out1、out2等]
,然后将listofimages:中p的替换为listofimages:
中im的并删除im=Image。打开(p)
您还可以为图像计算一些填充,以使黑空间均匀
from PIL import Image
im= Image.open('Tulips.jpg')
out=im.convert("RGB", (
0.412453, 0.357580, 0.180423, 0,
0.212671, 0.715160, 0.072169, 0,
0.019334, 0.119193, 0.950227, 0 ))
out.save("Image2.jpg")
out2=im.convert("RGB", (
0.9756324, 0.154789, 0.180423, 0,
0.212671, 0.715160, 0.254783, 0,
0.123456, 0.119193, 0.950227, 0 ))
out2.save("Image3.jpg")
out3= im.convert("1")
out3.save("Image4.jpg")
out4=im.convert("RGB", (
0.986542, 0.154789, 0.756231, 0,
0.212671, 0.715160, 0.254783, 0,
0.123456, 0.119193, 0.112348, 0 ))
out4.save("Image5.jpg")
out5=Image.blend(im, out4, 0.5)
out5.save("Image6.jpg")
listofimages=['Tulips.jpg', 'Image2.jpg', 'Image3.jpg', 'Image4.jpg', 'Image5.jpg', 'Image6.jpg']
def create_collage(width, height, listofimages):
cols = 3
rows = 2
thumbnail_width = width//cols
thumbnail_height = height//rows
size = thumbnail_width, thumbnail_height
new_im = Image.new('RGB', (width, height))
ims = []
for p in listofimages:
im = Image.open(p)
im.thumbnail(size)
ims.append(im)
i = 0
x = 0
y = 0
for col in range(cols):
for row in range(rows):
print(i, x, y)
new_im.paste(ims[i], (x, y))
i += 1
y += thumbnail_height
x += thumbnail_width
y = 0
new_im.save("Collage.jpg")
create_collage(450, 300, listofimages)
我明白了。漏洞。首先,#是注释的符号,而不是//。其次,循环是错误的:i应该在范围(0,a)内,而j应该在范围(0,b)内。没有检查其余的though@HennadiiMadan我用循环建议更新了shell上的代码,现在它只返回新创建图像最左侧的一张照片。我也一直在尝试任何新的方法来编写代码,但我仍然不知所措。还有什么建议吗?我想不出来我看到的第一个问题是create\u collage
没有被调用。a
和b
代表什么?我建议使用正确的变量名,而不是单个字母。@Nikki请根据Hugo的建议发布更新后的代码incorporated@Hugo我采纳了你的建议并编辑了我的代码。非常感谢。这正是我所需要的。我的图片显示了中间的黑色边框。有没有办法把它变成白色?@mango用白色而不是默认的黑色创建一个新的基础图像:new\u im=image.new('RGB',(宽度,高度),'white')