[英]Why is my tiled image shifted with pasting into Pillow?
我正在编写一个程序,我将图像切成许多子图块,处理图块,然后将它们拼接在一起。 我卡在缝合部分。 当我运行我的代码时,在第一行之后,每个图块移动一个空格。 我正在使用 1000x1000 的图块,图像大小可以是可变的。 我也得到了这个丑陋的水平填充,我不知道如何摆脱。 这是图像的谷歌驱动器链接: https : //drive.google.com/drive/folders/1HqRl29YlWUrsYoZP88TAztJe9uwgP5PS?usp=sharing
基于评论的澄清
我将原始的黑白图像裁剪成 1000px x 1000px 的黑白图块。 然后将这些图块重新着色,用与密度热图对应的颜色替换白色。 然后将重新着色的图块保存到该文件夹中。 我包含的图片是我试图拼凑在一起的彩色瓷砖之一。 当拼凑在一起时,它应该是黑白图像的相同形状但多色版本
from PIL import Image
import os
stitched_image = Image.new('RGB', (large_image.width, large_image.height))
image_list = os.listdir('recolored_tiles')
current_tile = 0
for i in range(0, large_image.height, 1000):
for j in range(0, large_image.width, 1000):
p = Image.open(f'recolored_tiles/{image_list[current_tile]}')
stitched_image.paste(p, (j, i), 0)
current_tile += 1
stitched_image.save('test.png')
首先,下面的代码将创建正确的图像:
from PIL import Image
import os
stitched_image = Image.new('RGB', (original_image_width, original_image_height))
image_list = os.listdir('recolored_tiles')
current_tile = 0
for y in range(0, original_image_height - 1, 894):
for x in range(0, original_image_width - 1, 1008):
tile_image = Image.open(f'recolored_tiles/{image_list[current_tile]}')
print("x: {0} y: {1}".format(x, y))
stitched_image.paste(tile_image, (x, y), 0)
current_tile += 1
stitched_image.save('test.png')
解释
首先,您应该注意到,您的图块不是 1000x1000。 它们都是 1008x984,因为 18145x16074 不能分成 19 个 1000x1000 的图块。
因此,您必须在 for 循环中放置正确的平铺宽度和高度:
for y in range(0, 16074, INSERT CURRECT RECOLORED_TILE HEIGHT HERE):
for x in range(0, 18145, INSERT CURRECT RECOLORED_TILE WIDTH HERE):
其次,python range 是如何工作的,它不会在最后一位数字上运行。 表示:
for i in range(0,5):
print(i)
输出将是:
0
1
2
3
4
因此,原始图像的宽度和高度必须减去 1,因为它认为您有 19 个图块,但实际上没有。
希望这行得通,你正在做一个多么酷的项目:)
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.