gyn

Win32下的Perl,无用的select,停滞的Tk,结束吧....

对于pil--handboook中反转图片函数的一点疑问

函数的意思很简单,给定一个Image对象和一个delta参数,然后根据这个delta参数将Image对象割成左右两块提取出来,之后互换两块的位置。
大致看了一下程序之后,自己写了一个,然后对照范例,除了变量名不一样之外基本上是吻合的,但是运行之后的结果却很不容乐观。图像不是左右互换,而是仿佛还有第三块夹在中间,这就不是需要的效果了。
为了找出原因,又仔细查了一遍函数,之后加了两条显示被分割出来的图片的命令。再次运行的结果却一切正常了,但注释掉这两句显示命令之后,毛病又复现。
显然在同一幅图片里进行分割黏贴的操作,pil是存在问题的。所以新建了一个Image对象,用于返回反转之后的图片,问题也得到了顺利的解决。
至于为什么会出现这个错误的现象,暂时不是很清楚。 
原图:


错误的图:


正确的图:


import Image

import ImageTk

def roll(im, delta):

    """Roll an image sideways"""

    

    x, y = im.size

    

    if delta % x == 0:

        return image

        

    im_l = im.crop((0, 0, delta, y))

    im_r = im.crop((delta, 0, x, y))

    

    # im_l.show()

    # im_r.show()

    

    imi = Image.new(im.mode, im.size)

    

    imi.paste(im_r, (0, 0, x - delta, y))

    imi.paste(im_l, (x - delta, 0, x, y))

    

    return imi

    

try:

    image = Image.open(r'd:\s\python\pil\tu\js.jpg')

    im = roll(image, 250)

    if im is not None:

        im.save(r'd:\s\python\pil\tu\js_r.jpg')

except IOError:

    print "Can not open file"


posted on 2008-07-02 21:03 gyn_tadao 阅读(415) 评论(0)  编辑 收藏 引用 所属分类: Python

只有注册用户登录后才能发表评论。
<2007年3月>
25262728123
45678910
11121314151617
18192021222324
25262728293031
1234567

导航

统计

常用链接

留言簿(15)

随笔分类(126)

随笔档案(108)

相册

搜索

最新评论

阅读排行榜

评论排行榜