使用Python保存脚本中编辑的JPG图像

0 投票
1 回答
3071 浏览
提问于 2025-04-18 10:05

根据对这个问题的回答,我尝试在进行了一些基本的图像处理后保存自己的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')

撰写回答