austin----- / weibo.emacs

Sina weibo client in Emacs
https://github.com/austin-----/weibo.emacs
105 stars 28 forks source link

windows下显示图片问题 #12

Closed imbear closed 12 years ago

imbear commented 12 years ago

更新timeline时,会显示残缺的图片,然后不时的有错误对话框弹出 ”JPEG Libaray Error“—”Corrupt JPEG data: 9 extraneous bytes before maker 0xdb“(错误消息中的数值各有不同)

但我看cache中保存的文件都是正常的jpeg文件,能看图软件打开,我怀疑是否是文件尚未下载保存完成时weibo就试图显示的缘故?

另外,在更新timeline的同时,emacs会同时打开一大堆buffer,都是cache中的图片文件(这些图片能在emacs中正常显示),等我要关闭emacs时,会提示我是否需要保存这些文件。这是正常现象吗?

我使用的Windows XP + GNU Emacs 24.1.1 (i386-mingw-nt5.1.2600),jpeg使用的gnuwin32中jpeg62.dll

austin----- commented 12 years ago

Imbear, 你好。Emacs24好像需要最新的jpeg62-4b,你可以看看是否已经是最新:gnuwin32的版本可能不是最新。你不需要保存图片buffer。如果你把图片文件直接拖入emacs可以正常显示,那weibo.emacs也能显示的。

austin----- commented 12 years ago

我的jpeg62.dll的版本是: 6.2.1961.25445 (6b.1961.25445)

imbear commented 12 years ago

我看了下,应该也是6b.1961.25445这个版本

austin----- commented 12 years ago

如果直接将cache中的图片文件拖进emacs的话,可以显示吗?

imbear commented 12 years ago

我又看了一下cache中图片文件,有一部分图片从预览来看已经是残缺的,图片中部分内容还是好的,其它地方都是“花”的,很明显是一块块的

austin----- commented 12 years ago

看来下载的时候就已经损坏了。如果用emacs打开这样的图片文件,然后用C-c C-c用文本显示,是否有HTTP Header之类的残留在文件中呢?

imbear commented 12 years ago

我用16进制编辑器粗粗看了下,这些损坏的文件看起来和正常完整的文件,头部的字节都是差不多,应该是标准的jpeg格式(图像浏览软件也都能识别为jpeg)。没有你说的http协议字串。

从图像损坏的情况来看,”花“掉的块大都是位于图像下半段,偶尔也有几个是位于上半段的;有些图像还有错位的现象,可能是整个数据块都丢失了吧

austin----- commented 12 years ago

你使用的是emacs自带的url-retrieve来下载的吧,没有配置其它的下载工具在emacs中如curl等?

liuheng commented 12 years ago

我也遇到了相同的问题,win7x64,GNU Emacs 24.1.1 (i386-mingw-nt6.1.7601),jpeg库正常,cache中的文件可以打开但本身是图块错位的,没有配置其他的下载工具,还需要提供什么信息吗?

austin----- commented 12 years ago

可以发一个这样的图片到我的邮箱吗? austiny.cn (at) gmail.com

austin----- commented 12 years ago

请运行这个命令: (weibo-download-image-file "http://tp2.sinaimg.cn/1851599793/50/5635560293/0")

然后将cache文件夹里面的483b8e17a9c53f38bd12759b3e30b2e1发给我好吗? 谢谢

austin----- commented 12 years ago

修改了代码,@imbear,@liuheng,请试试现在图片是否能正常显示了。使用之前,请清空cache中的损坏图片文件。

jrlj commented 12 years ago

还是有问题,提示 corrupt jepg data: 9 extraneous byte before marker 0xdb

austin----- commented 12 years ago

@tianyu6911 能发给我一个这样的文件吗? 谢谢。

imbear commented 12 years ago

我更新到 commit 77577b4def053190d35bd41e8118b7f0e646144b

试了几次,发现似乎问题更严重了,看起来没有一个图片是正确的(以前的版本还是有正确的图片的)

图片打包 cache.7z

jrlj commented 12 years ago

Hi Austin,

截图详见附件,谢谢。

Tianyu 2012/8/21 imbear notifications@github.com

我更新到 commit 77577b4https://github.com/austin-----/weibo.emacs/commit/77577b4def053190d35bd41e8118b7f0e646144b

试了几次,发现似乎问题更严重了,看起来没有一个图片是正确的(以前的版本还是有正确的图片的)

— Reply to this email directly or view it on GitHubhttps://github.com/austin-----/weibo.emacs/issues/12#issuecomment-7893976.

austin----- commented 12 years ago

@imbear 请运行这个命令: (switch-to-buffer (url-retrieve-synchronously "http://tp2.sinaimg.cn/1851599793/50/5635560293/0"))

然后将光标移至 "Connection: keep-alive"后,你能看到很多的"^M"吗?

austin----- commented 12 years ago

@tianyu6911 我没有收到你的截图。请也运行上面这个命令,然后截图给我。谢谢。

imbear commented 12 years ago

运行了你给的语句,保存buffer到out.jpg,去掉了前面http代码,结果就是以前那种错误图片。然后我和直接用curl下载的结果比较了一下 比较结果 out.jpg是emacs中直接保存的文件。看下来像是emacs按照文本来保存二进制文件,把0x0A当作换行符,保存时按照windows格式替换成0x0D0A。我看了下之前的cache中那些坏掉的图片,似乎都是这个问题。估计linux下没这个问题

austin----- commented 12 years ago

@imbear 是的,0d就是多出来的dos格式的换行符。 你在buffer中的时候,如果看到^M,就是这个0d。请看看在buffer中有没有^M(在不保存的情况下),这样我们就能知道多出来的0d是下载时增加的,还是保存时增加的。

imbear commented 12 years ago

没看到^M,切换到hexl-mode看了下,看到是0x0A。应该是保存时添加的

austin----- commented 12 years ago

知道了,你在同一个buffer里面 alt-: buffer-file-type 显示的是nil还是t呢?

austin----- commented 12 years ago

又更新了代码,请再试试看。

imbear commented 12 years ago

我更新了,试了两次,看起来现在图片都是对的:)

austin----- commented 12 years ago

@imbear 看来这个fix是可以的了。谢谢你的测试。