私はDSLR経由で写真を撮ってからps itし、PILを使って写真のサイズを変更したいと思います。コアコードはこちらPIL画像を変換すると悪い結果になる
image = Image.open(img_obj, 'r')
for pic_size_name, pic_size_val in pic_sizes.items():
width, height = [int(item) for item in pic_size_val.split('x')]
img_width, img_height = image.size
pic_save_path = os.path.join(
save_path,
hash_val + '_' + pic_size_name + '.jpg'
)
if image.mode not in ('L', 'RGB'):
image = image.convert('RGBA')
if width > img_width and height > img_height:
image.save(pic_save_path, "jpeg", quality=90)
continue
img = image.copy()
if pic_size_name == 's' or pic_size_name == 'xs':
dest_ratio = float(width)/height
current_ratio = float(img_width)/img_height
if dest_ratio > current_ratio:
offset = int((img_height - img_width/dest_ratio)/2)
box = (0, offset, img_width, img_height - offset)
else:
offset = int((img_width - img_height * dest_ratio)/2)
box = (offset, 0, img_width - offset, img_height)
img = img.crop(box)
img = img.resize((width, height), Image.ANTIALIAS)
img.save(pic_save_path, "jpeg", quality=90)
elif pic_size_name == 'm':
new_height = img_height * width/img_width
img = img.resize((width, new_height), Image.ANTIALIAS)
img.save(pic_save_path, "jpeg", quality=90)
else:
img.thumbnail((width, height), Image.ANTIALIAS)
img.save(pic_save_path, "jpeg")
しかし、サイズ変更の結果はあまり良くありません。
これはPILによって変換されます
これはどうあるべきかであるFlickrのことで変換されます
http://www.flickr.com/photos/lzyy/6524414285/sizes/z/in/photostream/
私はPILが間違って使用していたり、いくつかのトリック私はそこにあります知らない?
両方の画像を比較することは不可能である、であるとして、私はPILからのリンクやFlickr – tito
から1の間の差が表示されません。 Flikrは、私たちに白い背景と異なる画像サイズを与えます。もう一つは黒い背景にある。このような違いはありません。 – jsbueno
FYI、Flickrは通常、写真にいくつかのシャープニングとカラーバランスを適用しています。 – Benjamin