免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 4068 | 回复: 0
打印 上一主题 下一主题

PyQt/Qt中使用image(续) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2009-09-25 11:32 |只看该作者 |倒序浏览
      上一篇文章谈到如何让解决Qt中使用jpeg的问题,在我的电脑上,把PyQt4/plugins/imageformats文件夹复制到py2exe打包的可执行文件目录下后,jpeg的验证码显示正常了。可是后来发现copy到别人机器上时,又出现了问题,jpeg格式的验证码还是加载不了,于是又Google之。很多人都遇到过这个问题,说到Qt默认只对png格式支持,对其他图片格式的支持都是通过plugins里面的动态链接库DLL来支持的,所以提出两种办法:
      一就是我上述采用的方法了,将PyQt4/plugins/imageformats文件夹复制到py2exe打包的可执行文件目录下,这在我的电脑上时可以正常work的;
      二是在py2exe打包的可执行文件目录下建立文件夹PyQt4/plugins/imageformats,然后复制PyQt4/plugins/imageformats下的DLL文件到建立的imageformats下,将安装目录下的qt.conf复制到py2exe打包的可执行文件目录下,然后修改之:
               
               
                [Paths]
Prefix = ./PyQt4
Plugin = ./PyQt4/plugins
Binaries = .
      
      这两种方法在我的电脑上都是可以正常work的,但是复制到别人的机器上就不能work了,jpeg格式的验证码还是无法显示,郁闷之余,终于找到了一个折中的办法:先用PIL(Python Image Library)将jpeg文件转换成png格式的,然后用Qt直接显示png文件的验证码就没问题了。
      不过在转换中还是有问题,就是我的jpeg验证码从url获取的是字符串的格式,如果直接用PIL打需要的是文件或者file对象,所以需要用到StringIO的库,把string转换成文件IO的对象,这样就可以直接用PIL来操作啦,源代码如下:pixmap = QtGui.QPixmap()
jpgdata = self.qzone.reqVerifCode()  # request url to get jpeg data
strio = StringIO.StringIO(jpgdata)
img = Image.open(strio)
pngdata = StringIO.StringIO()        
img.save( pngdata, format='png')  # convert jpeg to png
bool = pixmap.loadFromData( QtCore.QByteArray(pngdata.getvalue()) )
if bool:
       icon = QtGui.QIcon( pixmap )
       self.veriCodeButton.setIcon( icon )
else:
       QtGui.QMessageBox.warning( None, u'警告',
                    u"加载验证码失败" )
      这下再复制到其他电脑上,肯定不会再出现问题啦,也不用打包plugin那些动态库了。虽然麻烦了一点,但是问题最终得到解决~~撒花!


本文来自ChinaUnix博客,如果查看原文请点:http://blog.chinaunix.net/u2/85537/showart_2059735.html
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP