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((00, 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, (
00, 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 阅读(96) 评论(0)  编辑 收藏 引用 所属分类: Python



标题  
姓名  
主页
验证码 *
内容(提交失败后,可以通过“恢复上次提交”恢复刚刚提交的内容)
 
  登录  使用高级评论  新用户注册  返回页首  恢复上次提交      
[使用Ctrl+Enter键可以直接提交]
 
相关链接:



<2008年12月>
30123456
78910111213
14151617181920
21222324252627
28293031123
45678910

导航

统计

常用链接

留言簿(3)

随笔分类(99)

随笔档案(82)

相册

搜索

最新评论

阅读排行榜

评论排行榜