我一直在制作水平和垂直轴镜像。现在我要做对角线。
我已经完成了hori和verti width for for循环,在hori场景中循环遍历高度中的所有像素,并且只有宽度中的一半像素。然后它获得像素的颜色并将相同的颜色设置为另一侧的像素。从getWidth(pic)
到中心。
然后我把镜子放在照片中间。如何做对角线方式?
编辑:
img_src = makePicture(pickAFile())
W = getWidth(img_src)
H = getHeight(img_src)
for x in range(W):
for y in range(H):
p = getPixel(img_src, x, y)
colorInSrc = getColor( getPixel(img_src, x, y) )
destPixel = getPixel(img_src, H-y-1, W-x-1)
setColor(destPixel, colorInSrc)
答案 0 :(得分:2)
使用PIL(Python Imaging Library)这是一项相对简单的任务。但请注意,输出图像是方形的 - 因此与原始图像的大小不同。
以下是代码:
from PIL import Image, ImageDraw
# load the image, create the mirrored image, and the result placeholder
img = Image.open('img.png')
mirror = img.transpose(Image.FLIP_LEFT_RIGHT).transpose(Image.ROTATE_90)
sz = max(img.size + mirror.size)
result = Image.new(img.mode, (sz,sz))
result.paste(img, (0,0)+img.size)
# now paste the mirrored image, but with a triangular binary mask
mask = Image.new('1', mirror.size)
draw = ImageDraw.Draw(mask)
draw.polygon([0,0,0,sz,sz,sz], outline='white', fill='white')
result.paste(mirror, (0,0)+mirror.size, mask)
# clean up and save the result
del mirror, mask, draw
result.save('result.png')
答案 1 :(得分:1)
这不是一个真正的Python问题,是吗?
最简单的解决方案是首先镜像水平然后垂直镜像。 另一个是用列切换像素行。
或者做你的算法但是将像素从左上角切换到右下角......
答案 2 :(得分:1)
如果我理解正确你需要的是用对角线“翻转”图像。由于其中有两个我会假设你的意思是从左下到右上的那个。
要按此对角线翻转,您需要从目标中的列中的源转换每一行。行的左侧部分将成为新列的底部。最顶行也将成为最右边的列。您需要在整个图像上逐个像素地执行此操作。另请注意,图像的宽度和高度将被交换。
修改:一个小例子。假设您从5像素宽和3像素高(5x3)的图像开始。您需要创建一个3像素宽,5像素高的新空白图像。
如果从左上角开始使用(0,0)开始像素编号,则此像素将在新图像中以(2,4)结束,像素(1,0)将以(2,3)结束等等。
如果你的原始宽度和高度是W和H,那么你应该使用这样的东西:
for x in xrange(W):
for y in xrange(H):
p = img_src.getpixel(x, y)
img_dest.setpixel(H-y-1, W-x-1)
这应该有效,但未经过测试。
答案 3 :(得分:0)
以下是如何在JES中对角镜像;它只适用于方形图像:
def mirrorDiagonal(picture):
for sourceX in range(0,getWidth(picture)):
for sourceY in range (0,getHeight(picture)):
pex=getPixel(picture,sourceY,sourceX)
pix=getPixel(picture, sourceX,sourceY)
color=getColor(pix)
setColor(pex,color)
show(picture)