imsave上的JPG图像尺寸减小了

时间:2017-06-24 13:12:33

标签: python scipy python-imaging-library

我正在建立一个名为hips的库,其中一个模块涉及获取图块图像并将其存储在磁盘上。这里的问题是我从remote URL获取一个磁贴,并使用scipy.misc.imsave函数将其保存在临时目录中。保存的文件大小为getContentText,但是,如果我从remote URL手动保存文件,则其大小为41.0 kB

我已经复制了下面的失败测试用例:

119.7 kB

这是失败的断言:

  

----------------------------------捕获的stdout调用---------- ----------------------------

     

(512,512,3)

     

(512,512,3)

     

平铺存储涉及的代码如下所示:

def test_fetch_read_write_jpg(self, tmpdir):
    meta = HipsTileMeta( ... )
    url = 'http://alasky.unistra.fr/2MASS/H/Norder6/Dir30000/Npix30889.jpg'
    tile = HipsTile.fetch(meta, url)

    filename = str(tmpdir / 'Npix30889.jpg')
    tile.write(filename)
    tile2 = HipsTile.read(meta, filename=filename)
    print(tile.data.shape)
    print(tile2.data.shape)

    assert tile == tile2 

我还尝试使用PIL.Image库保存文件,使用以下代码:

from scipy.misc import imsave
def write(self, filename: str = None) -> None:
    path = Path(filename) if filename else self.meta.full_path
    imsave(str(path), self.data)

但是,它会产生相同的结果。我尝试打印索引from PIL import Image image = Image.fromarray(self.data) image.save(str(path)) 的切片数据,这两种情况都是[0][0]。此外,我使用[10, 10, 10]显示图像,结果相同。但是,我无法弄清楚尺寸/质量下降的原因。

1 个答案:

答案 0 :(得分:1)

JPEGlossy格式。如果您将图像写入JPEG文件然后将其读回,则通常不会返回相同的数据。

对于无损图像存储,您可以使用PNG。