【问题标题】:How to overlap two or more images using paste()?如何使用 paste() 重叠两个或多个图像?
【发布时间】:2020-02-05 11:21:13
【问题描述】:

我正在为一个用 Python 编写的程序开发一个小 GUI,该程序需要支付金额、给定金额并以纸币和硬币的图像形式返回变化。由于 tkinter 的工作方式,我正在尝试优化与笔记图像重叠的空间,但我找不到使第二张图像不被剪切的方法。 这是我正在尝试的代码:

import tkinter as tk
from PIL import Image, ImageTk

window = tk.Tk()
window.title('main')
window.geometry('300x200')
test_image_1 = Image.open("fifty_pound.jpg")
test_image_1 = test_image_1.resize((250, 150), Image.ANTIALIAS)
test_image_2 = Image.open("twenty_pound.jpg")
test_image_2 = test_image_2.resize((250, 150), Image.ANTIALIAS)

Image.Image.paste(test_image_1, test_image_2, (50, 0))

test_image_1_render = ImageTk.PhotoImage(test_image_1)
test_image_label = tk.Label(image=test_image_1_render)
test_image_label.image = test_image_1_render
test_image_label.pack()

window.mainloop()

我得到的结果是这样的:

如您所见,20 英镑的钞票被剪掉了。我的问题是:

1) 20磅纸币图片是否可以粘贴到50磅纸币的上面而不被剪切?

2) 如何以相同的方式重叠两张以上的图片?

非常感谢大家的帮助。

这里使用了两张图片:

【问题讨论】:

  • 您可以计算重叠图像的最终尺寸,然后创建该尺寸的空白图像并将钞票图像粘贴到空白图像上。

标签: python tkinter python-imaging-library


【解决方案1】:

我基本上遵循 cmets 中给你的建议——但由于我已经准备了一些代码,这将是我的解决方案:

import tkinter as tk
from PIL import Image, ImageTk

# List of images (notes) to show
notes = ['fifty_pound.jpg', 'twenty_pound.jpg', 'twenty_pound.jpg']

# Same size for each note
x_note, y_note = (250, 150)

# Load images
notes = [Image.open(n).resize((x_note, y_note), Image.ANTIALIAS) for n in notes]

# Number of notes to show
n_notes = len(notes)

# Overlap (or offset) between notes
x_off, y_off = (50, 30)

# Calculate window size
window_size = (x_note + (n_notes - 1) * x_off, y_note + (n_notes - 1) * y_off)

# Create window
window = tk.Tk()
window.title('main')

# Create blank (white) image to paste notes on
new_image = Image.new('RGB', (window_size), (255, 255, 255))

# Paste notes
for i, n in enumerate(notes):
    Image.Image.paste(new_image, n, (i*x_off, i*y_off))

# Rendering
new_image_render = ImageTk.PhotoImage(new_image)
test_image_label = tk.Label(image=new_image_render)
test_image_label.image = new_image_render
test_image_label.pack()

window.mainloop()

输出:

希望有帮助!

----------------------------------------
System information
----------------------------------------
Platform:    Windows-10-10.0.16299-SP0
Python:      3.8.1
Pillow:      7.0.0
----------------------------------------

【讨论】:

  • 甜!!!为此非常感谢!所以我想我的错误是使用 50 英镑钞票的图像作为背景。现在,看着您的解决方案,这似乎很明显:) 再次感谢您的宝贵时间!!!
猜你喜欢
  • 2018-06-04
  • 2016-03-27
  • 1970-01-01
  • 2018-09-17
  • 2021-07-17
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多