使用Python保存脚本中编辑的JPG图像
根据对这个问题的回答,我尝试在进行了一些基本的图像处理后保存自己的JPG图片文件。我只做了旋转和剪切。这是我的代码:
import numpy as np
import sys
from skimage import data, io, filter, color, exposure
import skimage.transform as tf
from skimage.transform import rotate, setup, AffineTransform
from PIL import Image
mypath = PATH_TO_FILENAME
readfile = FILENAME
img = color.rgb2gray(io.imread(mypath + readfile))
myimg = rotate(img, angle=10, order=2)
afine_tf = tf.AffineTransform(shear=0.1)
editedimg = tf.warp(myimg, afine_tf)
# IF I UNCOMMENT THE TWO LINES BELOW, I CAN SEE THE EDITED IMAGE AS EXPECTED
#io.imshow(editedimg)
#io.show()
saveimg= np.array(editedimg)
result = Image.fromarray((saveimg).astype(np.uint8))
newfile = "edited_" + readfile
result.save(path+newfile)
我知道图像处理是没问题的,因为如果在保存之前显示它,它看起来就是原始图像,只是稍微旋转和剪切了一下,和我预期的一样。但是在保存的时候我做错了什么。我试过不加astype(np.uint8))
这一部分,但出现了错误。然后我从上面提到的链接中去掉了一些代码,因为我猜那些代码是专门用于傅里叶变换的。当我包含他们的一些代码时,得到的图像全是灰色,只有我剪切方向的白线。但现在保存的图像只是2KB的黑色空白。
而当我尝试一些简单的代码时:
result = Image.fromarray(editedimg)
result.save(path+newfile)
我得到了这个错误:
raise IOError("cannot write mode %s as JPEG" % im.mode)
IOError: cannot write mode F as JPEG
如果有其他简单的方法可以保存我的图像,我其实不需要使用PIL。
1 个回答
1
可以看看PIL的一个分支,叫做Pillow,这个库更新得比较及时,建议你使用这个。
另外,根据你使用的操作系统,你可能还需要一些其他的库,才能正确地让PIL支持JPEG格式,可以看看这里。
这个链接可能也有帮助,它提到在保存图片之前,你需要把图片转换成RGB模式。
Image.open('old.jpeg').convert('RGB').save('new.jpeg')