如何在通过Picasa API 上传图像时防止JPEG压缩?

1 投票
1 回答
2133 浏览
提问于 2025-04-15 18:14

我正在使用Python的客户端库来通过Picasa Web Albums API上传一些JPEG图片到相册。但是,上传后照片看起来压缩得很厉害。在Picasa 3.6中,有一个选项可以以原始质量上传图片,不进行压缩,但我想知道在API中是否有类似的选项可以使用?

这是我用来创建照片并将其插入相册的一些代码:

upload_photo = gdata.photos.PhotoEntry()
upload_photo.summary = atom.Summary(text=title)
upload_photo.title = atom.Title(text=file_name)
upload_photo.text = atom.Text(text='Test')
upload_photo.author = atom.Author(atom.Name(text='Test Author'))
upload_photo.timestamp = gdata.photos.Timestamp(text='%i' % 
  int(time.mktime(photo_date.timetuple()) * 1000))
upload_photo.geo = gdata.geo.Where()
upload_photo.geo.Point = gdata.geo.Point()
upload_photo.geo.Point.pos = gdata.geo.Pos(text='%f %f' % (lat, lon))

imgContent = StringIO.StringIO(urlfetch.fetch('http://url.com/image1.jpg').content)

gpclient.InsertPhoto(album_or_uri=album_url, photo=upload_photo,   
  filename_or_handle=imgContent, content_type='image/jpeg')

1 个回答

3

我自己解决了这个问题,结果还挺奇怪的 :-)

我在Picasa数据API的Google小组里问了一下,大家都说这个API在上传新图片时不会进行压缩。这让我去看看其他的代码,特别是urlfetch

结果发现urlfetch获取的是压缩过的JPEG图片。可是为什么呢?我是不是忘记设置什么参数了?我翻阅了文档,但没找到任何限制。

然后我突然明白发生了什么。我是在本地机器上测试的,使用的是Google App Engine SDK,这个SDK通过T-Mobile的移动宽带连接互联网。而T-Mobile在你下载图片时会用代理来压缩这些图片。我在Firefox浏览器上用一个扩展来修改HTTP头,以防止在浏览时进行压缩,但显然urlfetch并没有这样做。

在我做了这个修改后,它就能下载原始质量的JPEG图片,并顺利上传到Picasa了。

撰写回答