2017-06-24 8 views
0

hipsという名前のライブラリを構築しています。ここでは、1つのモジュールがタイルイメージを取得してディスクに格納しています。ここでの問題は、remote URLからタイルを取得し、scipy.misc.imsave機能を使用して一時ディレクトリに保存することです。保存されたファイルサイズは41.0 kBですが、remote URLから手動でファイルを保存すると、そのサイズは119.7 kBになります。imsaveで縮小されたJPGイメージサイズ

私は下に失敗したテストケースをコピーした:------------------

ここ
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 

は失敗したアサーションです----------------キャプチャされたstdout呼び出し------------------------------- -------

(512、512、3)

(512、512、3)

タイル保存に関わるコードを以下に示します。

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) 

私もこのコードを使用して、PIL.Imageライブラリを使用してファイルを保存しようとした:

from PIL import Image 
image = Image.fromarray(self.data) 
image.save(str(path)) 

しかし、同じ結果が得られます。私は両方の場合について[10, 10, 10]となったインデックス[0][0]でタイルデータを印刷しようとしました。また、matplotlibを使用して画像を表示したところ、結果は同じでした。しかし、私はサイズ/品質の低下の理由を理解することはできません。

答えて

1

JPEGは、lossyの形式です。 JPEGファイルに画像を書き込んだり読み込んだりすると、一般的に同じデータが返されることはありません。

可逆画像保存の場合、PNGを使用できます。

関連する問題