首页 > linux, python > python 图片处理

python 图片处理

有一堆gif图片,需要处理,python有一个PIL库,处理起来很方便,但是转换的效果很有问题。如: 这一张透明的gif图片,使用简单的保存语句:

from PIL import Image

im = Image.open(’9.gif’)
transparency = im.info['transparency']
im.save(’output.gif’ ,transparency=transparency )

得出的output.gif为 ,多了一些乱七八糟的点。怀疑是我的windows系统环境有问题,然后拿到了ubuntu系统上测试,也是如此,不甘心,在ubuntu上下载了一个python 2.5.4,再下载了PIL的源码进行编译,现象依旧。然后再跑到国外的主机上进行测试,也是一样,不过转换出来的大小都不太一样,有几十个字节的差异。

在open之后,我立即打印了im的数据

print list(im.getdata())

按照正常的话,黑白gif应该只有0和1的点,但是发现下面有很多大于1的点:

[0, 0, 0, 0, 192, 48, 30, 30, 241, 0, 0, 0, 255, 255, 255, 255, 0, 0, 0, 0, 100, 0, 0, 90, 0, 0, 100, 1, 0, 100, 2, 0, 107, 1, 0, 90, 1, 0, 100, 1, 0, 100, 2, 0
, 107, 2, 0, 90, 2, 0, 100, 0, 0, 0, 1, 1, 1, 1, 1, 0, 3, 0, 104, 0, 0, 4, 100, 0, 0, 0, 0, 1, 0, 0, 0, 1, 5, 0, 2, 100, 6, 0, 60, 0, 0, 0, 0, 1, 0, 0, 0, 1, 4,
100, 9, 0, 2, 100, 10, 0, 0, 0, 1, 0, 0, 0, 0, 1, 0, 60, 4, 100, 13, 0, 2, 0, 0, 0, 1, 0, 0, 0, 1, 0, 100, 15, 0, 60, 90, 4, 0, 0, 0, 0, 1, 1, 1, 1, 0, 0, 100,
17, 0, 101, 3, 0, 105, 0, 0, 1, 0, 0, 1, 0, 0, 0, 0, 0, 131, 0, 0, 89, 90, 0, 0, 1, 0, 0, 0, 1, 0, 0, 7, 0, 101, 2, 0, 105, 8, 0, 0, 1, 0, 0, 0, 1, 0, 0, 0, 13
1, 3, 0, 1, 101, 2, 0, 1, 0, 0, 0, 0, 0, 1, 0, 0, 131, 2, 0, 1, 101, 2, 1, 1, 1, 1, 0, 0, 0, 1, 1, 0, 131, 2, 0, 1, 101, 2, 0, 105, 10, 0, 100, 20, 0, 100, 22,
0, 131, 2, 0, 1, 101, 2, 0, 105, 10, 0, 100, 20, 0, 100, 23, 0, 131, 2, 0, 1, 100, 2, 0, 83, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]

尝试将大于1的点清0,再putdata回去,结果是干净了一点,但还有一些污点,可能本来是一些0的点被染成了1。

该gif图片的格式为GIF89a,转存之后为GIF87a。

我又尝试了一些非透明的gif,这样的转存没有问题。难道是PIL对透明gif处理有问题?google了很多文章,都没有发现什么解决方案或者类似的问题,老外写的文章PIL Tips: Converting Between PNG and GIF,倒是有很多例子,不过好像没有碰到我的这个问题。

————————————————————————

没辙了,看看有没有其他的图形库。发现了imagemagick。有python接口,提供了命令行工具。于是在ubuntu上用sudo apt-get install python-pythonmagick安装,下了一堆包,安装完成,在site-packages目录没有发现任何新东西,不知道给装到哪里去了。当然就无法import PythonMagick了。罢了,还是手工编译安装吧。

imagemagick很顺利的编译安装,听说python接口手工安装非常麻烦,也不用python接口了,直接使用命令行进行处理。看了大量的例子帮助,明白了一些基本用法,直接在命令行输入下列指令:

convert 9.gif output.gif

这回成功了,output.gif和9.gif图片一样的。但是在将png转换为gif的时候报错:

convert    gtk1.png  gtk1.gif
convert: no decode delegate for this image format

google了一下,应该是少了一些部件。需要到(http://www.imagemagick.org/download/delegates/)下载所缺少的库进行安装,之后imagemagick需要再重新configue ,make install.

分类: linux, python 标签:
  1. 2009年12月23日05:52 | #1

    黑白图片不应该只有01吧 灰色也应该有吧
    是不是颜色索引的事

  1. 本文目前尚无任何 trackbacks 和 pingbacks.