【发布时间】:2015-02-25 03:59:51
【问题描述】:
我正在尝试使用各种库的 STDIN 版本(本示例中为 jpegoptim)在不接触磁盘的情况下压缩图像。
此代码不返回优化的(jpegoptim 压缩)图像。
有人可以帮助或解释为什么 Popen() 与 StringIO.StringIO() 对象的这种用法不会返回图像的优化版本吗?如果我将文件保存到磁盘,它工作得很好。
import sys
import urllib2 as urllib
import StringIO
from subprocess import Popen, PIPE, STDOUT
fp = urllib.urlopen('http://www.path.to/unoptimized.jpg')
out_im2 = StringIO.StringIO(fp.read()) # StringIO Image
print "Image Size: %s" % format(sys.getsizeof(out_im2.getvalue()))
subp = Popen(["/usr/bin/jpegoptim", "-"], shell=True, stdout=PIPE, stdin=PIPE, stderr=STDOUT)
image_str = subp.communicate(input=out_im2.getvalue())[0]
out_im2.write(image_str)
##This should be a different size if it worked! It's not
print "Compressed JPG: %s" % format(sys.getsizeof(out_im2.getvalue()))
【问题讨论】:
-
仅供参考,标准输入功能需要 jpegoptim 1.4+。
标签: python popen stringio jpegoptim