在 PIL 中制作拼贴画

2023-12-02

我是。卡住。

我已经为此工作了一个多星期了,但我似乎无法让我的代码正确运行。我对 PIL 和 Python 整体来说还很陌生。我正在尝试制作一些图片的 2x3 拼贴画。下面列出了我的代码。我试图让我的照片适合新创建的拼贴画中的任何访问黑色空间,但是当我运行我的代码时,我只能将 2 张图片放入拼贴画中,而不是我想要的 6 张图片。任何的意见都将会有帮助。

*代码已编辑

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)

这是一些工作代码。

  1. 你打电话时Image.open(p),它返回一个 Image 对象,因此您需要将其存储在变量中:im = Image.open(p).

  2. 我不知道什么image=Image.eval(p, lambda x: x+(col+row)/30)是为了这样做我把它删除了。

  3. size是缩略图的大小,但您没有使用该变量。打开图像后,应将其调整为size.

  4. 我将 Picturewidth 和 Pictureheight 重命名为thumbnail_width 和thumbnail_height,以明确它们是什么并遵循 Python 命名约定。

  5. 我还将列数和行数移至变量,以便可以在没有幻数的情况下重复使用它们。

  6. 第一个循环将每个图像打开为im,对其进行缩略图并将其放入列表中ims.

  7. 在下一个循环之前我们初始化i,x, andy` 变量来跟踪我们正在查看的图像,以及 x 和 y 坐标以将缩略图粘贴到更大的画布中。它们将在下一个循环中更新。

  8. 第一个循环针对列 (cols),而不是像素(width)。 (还range(0, thing)做同样的事range(thing).)

  9. 类似地,第二个循环是针对行而不是像素。在这个循环中,我们将当前图像粘贴到ims[i]进入大new_im at x, y。这些是像素位置,而不是行/列位置。

  10. 在内循环结束时,增加i计数器,并添加thumbnail_height to y.

  11. 同样,在外循环的末尾,添加thumnnail_width to x并重置y为零。

  12. 你只需要保存new_im一次,在这些循环完成之后。

  13. 不需要串联"Image2" + ".jpg"等等,只需做“Image2.jpg”。

这会导致这样的结果:

Collage.jpg

这段代码可以改进。例如,如果您不需要它们做其他任何事情,则无需保存中间 ImageX.jpg 文件,而不是将这些文件名放入listofimages,将图像直接放在那里:listofimages = [im, out1, out2, etc...],然后替换for p in listofimages: with for im in listofimages:并删除im = Image.open(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)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 PIL 中制作拼贴画 的相关文章

  • 从 Python 中的 message_from_string() 获取发件人地址

    有人可以告诉我如何在Python中从email message from string 获取发件人地址吗 谢谢 我试过 message email message from string email text from message Fr
  • setColumnStretch 和 setRowStretch 如何工作

    我有一个使用构建的应用程序PySide2它使用setColumnStretch用于柱拉伸和setRowStretch用于行拉伸 它工作得很好 但我无法理解它是如何工作的 我参考了 qt 文档 但它对我没有帮助 我被困在括号内的两个值上 例如
  • 如何在Python中反转列表的列表? [复制]

    这个问题在这里已经有答案了 我想知道如何反转 python 中的列表列表 例如 原来的 list 1 2 3 4 5 6 7 8 9 输出 new list 7 8 9 4 5 6 1 2 3 现在 我正在尝试这样做 new list re
  • Python:由于 OSError 无法安装软件包:[Errno 2] 没有这样的文件或目录

    我尝试使用pip安装sklearn 并且我收到以下错误消息 错误 由于 OSError 无法安装软件包 Errno 2 没有这样的文件或目录 C Users 13434 AppData Local Packages PythonSoftwa
  • 如何进行重定向并保留查询字符串?

    我想进行重定向并保留查询字符串 就像是self redirect加上发送的查询参数 那可能吗 newurl my new route urllib urlencode self request params self redirect ne
  • FastAPI UploadFile 与 Flask 相比慢

    我创建了一个端点 如下所示 app post report upload def create upload files files UploadFile File try with open files filename wb as wf
  • 在Python中,如何通过去掉括号和大括号来打印Json

    我想以一种很好的方式打印 Json 我想去掉方括号 引号和大括号 只使用缩进和行尾来显示 json 的结构 例如 如果我有一个像这样的 Json A A1 1 A2 2 B B1 B11 B111 1 B112 2 B12 B121 1
  • Python SQLite3 SQL注入漏洞代码

    我知道下面的代码片段由于 format 的原因很容易受到 SQL 注入的攻击 但我不知道为什么 有谁明白为什么这段代码容易受到攻击以及我从哪里开始修复它 我知道这些代码片段使输入字段保持打开状态 以便通过 SQL 注入执行其他恶意命令 但不
  • 按升序对数字字符串列表进行排序

    我创建了一个SQLite https en wikipedia org wiki SQLite数据库有一个存储温度值的表 第一次将温度值按升序写入数据库 然后 我将数据库中的温度值读入列表中 然后将该列表添加到组合框中以选择温度 效果很好
  • Python正则表达式替换引号中的文本(引号本身除外)

    例如 我有一个测试字符串 content I opened my mouth Good morning I said cheerfully 我想使用正则表达式删除双语音标记之间的文本 但不删除语音标记本身 所以它会返回 I opened m
  • Flask 和 Reactjs 抛出 JSX 转换错误

    我已经开始将 ReactJS 与 Python Flask 后端结合使用 通过 Flask 渲染模板时 我在 Chrome 控制台中收到以下客户端错误 错误 找不到模块 jstransform visitors es6 templates
  • 在 Python 中引发异常的正确方法是什么? [复制]

    这个问题在这里已经有答案了 这是简单的代码 import sys class EmptyArgs StandardError pass if name main The first way to raise an exception if
  • Python:如何“杀死”类实例/对象?

    我希望 Roach 类在达到一定量的 饥饿 时 死亡 但我不知道如何删除该实例 我的术语可能有误 但我的意思是 窗户上有大量 蟑螂 我希望特定的蟑螂完全消失 我会向您展示代码 但它很长 我将蟑螂类添加到策划者类蟑螂种群列表中 一般来说 每个
  • 从 SUDS 中的 SOAP 响应中提取 Cookie

    我必须使用具有多种服务的 API 所有这些都需要来自下面的身份验证的 JSESSION cookie 然而 当我调用下一个服务时 它不会保留 cookie 因此会拒绝它们 from suds client import Client url
  • 根据标签位置计算 Pandas DataFrame 的索引

    我正在尝试计算标签的索引Pandas https pandas pydata org DataFrame在每一列中 基本上我有以下内容DataFrame d col1 label1 label2 label3 col2 label2 lab
  • 从函数在 python 3 中创建全局变量

    我想知道为什么在函数结束后我无法访问变量 variable for raw data 代码是这样的 def htmlfrom Website URL import urllib request response urllib request
  • model.predict() 返回类而不是概率

    Hello 我是第一次使用 Keras 我训练并保存了一个模型 作为 json 文件及其权重 该模型旨在将图像分为 3 个类别 我的编译方法 model compile loss categorical crossentropy optim
  • 如何通过 API Gateway 使用事件调用类型调用 Lambda 函数?

    文件说 默认情况下 Invoke API 采用 RequestResponse 调用类型 您可以选择通过将 Event 指定为 InitationType 来请求异步执行 因此 我可以发送到我的函数 python 的就是到处都是 Inspi
  • Docker Python 脚本找不到文件

    我已经成功构建了一个 Docker 容器 并将应用程序的文件复制到 Dockerfile 中的容器中 但是 我正在尝试执行引用输入文件 在 Docker 构建期间复制到容器中 的 Python 脚本 我似乎无法弄清楚为什么我的脚本告诉我它无
  • nltk 标记化和缩写

    我用 nltk 对文本进行标记 只是将句子输入到 wordpunct tokenizer 中 这会拆分缩写 例如 don t 到 don t 但我想将它们保留为一个单词 我正在改进我的方法 以实现更精确的文本标记化 因此我需要更深入地研究

随机推荐

  • 如何在java中添加图像到表单

    我正在使用 JDeveloper 在 java 中设计一个表单 我是 JDeveloper 的新手 在 JDeveloper 工具中 我没有找到任何像 Net 那样直接将图像添加到表单的选项 而且我不知道如何手动添加图像到表单 有没有其他方
  • 无法连接到面向互联网的 NLB 将流量转发到私有实例

    我已经使用以下配置配置了云 VPC 在两个可用区中具有公有子网和私有子网 公有子网配置了 Internet 网关 私有子网配置了 NAT 网关 面向互联网的网络负载均衡器 允许在两个可用区域中配置 TCP 流量 用于转发来自负载均衡器的流量
  • 为什么我的 t-sql 左连接不起作用?

    你能运行这个并告诉我为什么结果集只有两行吗 它应该有三个 看起来像这样 appId stepId section start 101 1 Section 1 2016 01 03 00 00 00 000 101 2 Section 2 2
  • X-可编辑和 Bootstrap 数据表

    我尝试在引导数据表中实现 x editable 没有成功 原因是当我从 x editable 更新元素时 数据表无法识别这些更改 我尝试更新表 销毁它 隐藏标签 但主要问题似乎是数据表在初始化后无法识别任何更改 我通过单击按钮添加行 当它们
  • MEF2 中的强类型元数据 (System.Composition)

    我正在使用 System Composition 命名空间适用于 Web 和 Windows 应用商店应用 NuGet 包的 MEF在新的 ASP NET MVC4 项目中 I ve read在 MEF2 中您不再使用Lazy
  • CSS 背景过滤器在其后面的内容移动时不会更新

    我应该认为作为背后的内容backdropped元素移动时 元素的背景颜色会适应 看起来就像内容透过它发光一样 在这个例子中 情况并非如此 怎么了 在 Safari 12 0 3 macOS Mojave 10 14 3 上进行了测试 con
  • int num = new int();当这一行执行时会发生什么?

    今天了解了一个新事物 我们可以使用以下方法创建整数new运算符如下 int num new int 现在我想知道如果我以这种方式创建一个整数 那么生成的整数将是值类型还是引用类型 我想这将是一个值类型 我尝试了下面的代码 int num1
  • 生成的 Swagger REST 客户端无法正确处理查询参数的 + 字符

    我有这个 Spring REST 控制器方法 ApiOperation My method RequestMapping method RequestMethod POST value myMethod public void myMeth
  • 如何生成向量的所有可能组合

    我有一个向量 比如说A B C D E我有兴趣生成向量元素的所有可能的组合 下面给出了所需的输出 B A C A D A E A C B D B E B D C E C E D Try combn v1 2 FUN function x p
  • 如何在 JPA 中表达多态关联?

    A 多态关联类似于外键或多对一关系 不同之处在于目标可能是多种类型之一 语言中的类 数据库中的表 我正在将我使用多年的数据库设计从 PHP 移植到 Java 在旧代码中 我推出了自己的 ORM 但由于多种原因 它并不是最佳的 尽管我可能稍后
  • Google 地图容器显示没有地图

    我知道这个问题之前已经被问过很多次了 但是我见过的其他答案似乎都没有帮助我 基本上 地图的容器显示 作为页面上 500x300px 的空白 但没有地图 无论我做什么 我都无法显示地图 正如您可能猜到的那样 我不熟悉 Google 地图 因此
  • 将自动完成列表中的国家/地区的 Google 地图限制为“印度、美国和英国”

    该代码不起作用 请告诉我具体的解决方案 javascript gt
  • 为什么 readfile() 在读取 php 文件时表现得很奇怪,但在文本文件上却工作得很好

    代码在index php hello php 中的代码 我得到的输出是47但是当我在 hello php 中的字符串之前添加一行时 即echo br hello this is a php file 我得到输出hello this is a
  • 使用 python 3 专门化 JSON 对象编码

    由于Python3中dict values 和keys 的更改 我遇到了一些麻烦 我的旧代码是这样的 import json class ComplexEncoder json JSONEncoder def default self ob
  • 生成重复序列

    我需要使用 R 生成以下格式的向量 1 10 1 10 11 20 11 20 121 130 121 130 有没有比创建 12 个向量然后将每个向量重复两次更简单的方法 你也可以这样做 rep 1 10 26 rep seq 0 120
  • 避免多次快速点击按钮

    我的应用程序有一个问题 如果用户快速单击按钮多次 那么在按住按钮的对话框消失之前就会生成多个事件 我知道一个解决方案 通过在单击按钮时将布尔变量设置为标志 以便可以防止将来的单击 直到对话框关闭 然而 我有很多按钮 每次都必须为每个按钮执行
  • 在 mongodb 集合中查找一些值?

    我正在尝试使用 java 读取 mongodb 用户数据库 在教程页面上我看到了如何阅读整个集合 我可以做这样的事情 DBCursor cursor col find while cursor hasNext System out prin
  • 创建表,检查可能的文本值

    我正在使用 MS Access 2010 并尝试使用 SQL 创建表 我想加入一些检查约束 但我遇到了一些麻烦 CREATE TABLE Test tester Text CHECK tester IN ABC BCD CDE 我遇到语法错
  • `use` 包作用域:如何使其跨文件?

    In scriptA pl 有use DBI In scriptB pl 有require scriptA pl 但我们仍然不能使用DBI包scriptB pl 除了重复之外有任何方法可以处理这个问题use DBI in scriptB p
  • 在 PIL 中制作拼贴画

    我是 卡住 我已经为此工作了一个多星期了 但我似乎无法让我的代码正确运行 我对 PIL 和 Python 整体来说还很陌生 我正在尝试制作一些图片的 2x3 拼贴画 下面列出了我的代码 我试图让我的照片适合新创建的拼贴画中的任何访问黑色空间