你们是如何解决 Android 压缩图片质量差的问题的? - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
DearTanker
V2EX    Android

你们是如何解决 Android 压缩图片质量差的问题的?

  •  2
     
  •   DearTanker 2014-12-16 12:35:32 +08:00 19855 次点击
    这是一个创建于 4033 天前的主题,其中的信息可能已经有所发展或是发生改变。
    同样原图,缩放为宽度720px

    iOS下压缩为质量60%都可以完爆Android压缩质量100%的,而且文件本身差不多只有一半。

    研究发现,为了降低肉眼可见的差别,新浪微博的做法是将宽度缩放为1200px,但是iOS压缩后的图片比Android要大的多。

    据说是Android本身使用的libjpeg库历史遗留问题

    http://www.cnblogs.com/MaxIE/p/3951294.html

    有没有人研究Android下图片压缩的更好办法呢。。

    Android微博,宽度1200px,压缩质量未知,文件大小295k

    
    iPhone微博,宽度1200px,压缩质量未知,文件大小565k

    

    Android,宽度720px,压缩质量60,文件大小98.8k

    http://oi60.tinypic.com/5cwyee.jpg

    iOS,宽度720px,压缩质量60,文件大小152k

    http://oi60.tinypic.com/slilat.jpg
    36 条回复    2014-12-29 14:07:21 +08:00
    est
        1
    est  
       2014-12-16 12:46:00 +08:00
    自己打包进去一个 libjpeg/mozjpeg 不行么。。。
    DearTanker
        2
    DearTanker  
    OP
       2014-12-16 12:46:48 +08:00 via iPhone
    改天写篇博文分享一下这两天的发现
    DearTanker
        3
    DearTanker  
    OP
       2014-12-16 12:47:30 +08:00 via iPhone
    @est 有没有好的库推荐?
    michaelye1988
        4
    michaelye1988  
       2014-12-16 12:52:25 +08:00
    还没发现这个问题,不知道你的需求是什么样的,一般图片的话,我是这样做的,根据当前的手机分辨率去服务端请求不同尺寸的图片,服务端一般需要对一张图片提供多种尺寸。
    DearTanker
        5
    DearTanker  
    OP
       2014-12-16 12:56:34 +08:00 via iPhone
    @michaelye1988 上传啊,同一张照片两个平台相同需求出来的图片质量相差太大
    whuhacker
        6
    whuhacker  
       2014-12-16 12:58:25 +08:00
    你是如何定义质量差的?为啥我看不出来有啥差别……
    相比之下 Android 的文件大小还有优势些
    DearTanker
        7
    DearTanker  
    OP
       2014-12-16 13:04:36 +08:00
    @whuhacker 1200px确实没那么明显,最下面的那2张同为720px的时候我不信你看出来那张差很多
    GhostFlying
        8
    GhostFlying  
       2014-12-16 13:06:45 +08:00
    我都是压png的。。
    icedx
        9
    icedx  
       2014-12-16 13:08:33 +08:00 via Android
    楼主发现了不得了的秘密...
    我给一个团队写过一个压缩引擎, 就是这样解决的...
    ozking
        10
    ozking  
       2014-12-16 13:34:51 +08:00
    http://oi60.tinypic.com/5cwyee.jpg
    哈哈哈,这张图片都炸毛了
    DearTanker
        11
    DearTanker  
    OP
       2014-12-16 13:36:46 +08:00
    @xudshen 所以说很明显啊。
    DearTanker
        12
    DearTanker  
    OP
       2014-12-16 13:37:08 +08:00
    @icedx 你是说弄大图吗?
    seathink
        13
    seathink  
       2014-12-16 13:51:17 +08:00
    chizhong
        14
    chizhong  
       2014-12-16 13:59:10 +08:00
    @seathink 这也行…………
    icedx
        15
    icedx  
       2014-12-16 14:02:34 +08:00 via Android
    @DearTanker 不, 单纯的压缩, 不依赖Skia
    DearTanker
        16
    DearTanker  
    OP
       2014-12-16 14:04:44 +08:00
    @seathink 嗯,有看到这个中文版的,但是问题是,现在找不到编译好的libjpeg-turbo库文件,然后公司没人会NDK编译。。
    DearTanker
        17
    DearTanker  
    OP
       2014-12-16 14:05:16 +08:00
    @icedx 能详细说说么。。。
    icedx
        18
    icedx  
       2014-12-16 14:18:55 +08:00 via Android
    @DearTanker 我就翻了翻那团队的统计数据, 根据机型分布封装了一个libjpeg, 开放简单的接口给他们用...
    michaelye1988
        19
    michaelye1988  
       2014-12-16 14:33:39 +08:00
    @DearTanker 哦,那就不懂了,这确实是个问题。
    seathink
        20
    seathink  
       2014-12-16 14:42:41 +08:00
    @DearTanker 里面有较详细的编译步骤,自己看看就差不多了
    pubby
        21
    pubby  
       2014-12-16 14:50:56 +08:00
    那不折腾的做法是 安卓上缩一个大点的图,尽量保留一些细节?
    DearTanker
        22
    DearTanker  
    OP
       2014-12-16 15:04:05 +08:00
    @pubby 对啊,最简单的解决办法就是图大点,像新浪微博一样,不过同等宽1200px,Android的文件大小只有iOS的一半左右,个人猜测,新浪微博没有自己编译一个库。这可就苦了iOS,要多传一倍的流量,难道这就是很多人觉得苹果机耗流量的原因么= =
    pubby
        23
    pubby  
       2014-12-16 15:58:13 +08:00
    @DearTanker 没有啊,就安卓的1200px, iOS的还是720px啊。
    反正要提高画质,安卓就要增大文件尺寸嘛
    DearTanker
        24
    DearTanker  
    OP
       2014-12-16 16:01:32 +08:00
    @pubby 嗯,我说的是微博的做法,牺牲了iOS的体验。
    ltyhpynyh
        25
    ltyhpynyh  
       2014-12-16 16:04:29 +08:00
    之前没注意,关注一下
    twocity
        26
    twocity  
       2014-12-16 16:43:39 +08:00
    lz可以提供一下原图吗
    DearTanker
        27
    DearTanker  
    OP
       2014-12-16 18:10:20 +08:00
    @twocity 可以,包括原图,Android和iOS处理后的图片,分别都有60%和100%的,但是宽度都是720px的。希望可以帮到你

    http://pan.baidu.com/s/1pJ5arMF
    twocity
        28
    twocity  
       2014-12-16 18:44:58 +08:00
    @DearTanker 多谢
    twocity
        29
    twocity  
       2014-12-17 01:00:53 +08:00
    我试了一下。Android下,同样的压缩质量,效果并没有lz的差(但iOS确实效果好一些)。这里是测试结果http://goo.gl/yddMfG,这是测试代码http://goo.gl/lXq9JJ
    DearTanker
        30
    DearTanker  
    OP
       2014-12-17 08:54:42 +08:00
    @twocity 太感谢了,确实效果比我出来的好很多,看边缘的细毛就可以发现了,我研究一下。
    DearTanker
        31
    DearTanker  
    OP
       2014-12-17 09:35:15 +08:00
    @twocity 你用的是2.2以后才有的ThumbnailUtils.extractThumbnail这个方法吧,这样不是不兼容2.2以下的机器?
    twocity
        32
    twocity  
       2014-12-17 14:08:45 +08:00
    @DearTanker 可以自己写一个简单的http://goo.gl/zxo537
    DearTanker
        33
    DearTanker  
    OP
       2014-12-23 09:45:26 +08:00
    @twocity



    这张图,安卓出来的相比iOS出来的简直是惨不忍睹。。。但是其他图片都还好~
    twocity
        34
    twocity  
       2014-12-23 11:45:05 +08:00
    @DearTanker 我看了下确实是这样...那就无解了
    DearTanker
        35
    DearTanker  
    OP
       2014-12-23 20:01:46 +08:00
    @twocity 嗯。现在只能是提升图片的分辨率了。分辨率提高后,不会这么残。。
    DearTanker
        36
    DearTanker  
    OP
       2014-12-29 14:07:21 +08:00
    @twocity 还有个蛋疼的问题,有些图设置质量100%,出来的图比原图都大,改成95%依然还是有变大。。。

    图片原图发给你试试:

    http://pan.baidu.com/s/1jGmTWxS
    关于     帮助文档     自助推广系统     博客     API     FAQ     Solana     2436 人在线   最高记录 6679       Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 26ms UTC 11:11 PVG 19:11 LAX 03:11 JFK 06:11
    Do have faith in what you're doing.
    ubao msn snddm index pchome yahoo rakuten mypaper meadowduck bidyahoo youbao zxmzxm asda bnvcg cvbfg dfscv mmhjk xxddc yybgb zznbn ccubao uaitu acv GXCV ET GDG YH FG BCVB FJFH CBRE CBC GDG ET54 WRWR RWER WREW WRWER RWER SDG EW SF DSFSF fbbs ubao fhd dfg ewr dg df ewwr ewwr et ruyut utut dfg fgd gdfgt etg dfgt dfgd ert4 gd fgg wr 235 wer3 we vsdf sdf gdf ert xcv sdf rwer hfd dfg cvb rwf afb dfh jgh bmn lgh rty gfds cxv xcv xcs vdas fdf fgd cv sdf tert sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf sdf shasha9178 shasha9178 shasha9178 shasha9178 shasha9178 liflif2 liflif2 liflif2 liflif2 liflif2 liblib3 liblib3 liblib3 liblib3 liblib3 zhazha444 zhazha444 zhazha444 zhazha444 zhazha444 dende5 dende denden denden2 denden21 fenfen9 fenf619 fen619 fenfe9 fe619 sdf sdf sdf sdf sdf zhazh90 zhazh0 zhaa50 zha90 zh590 zho zhoz zhozh zhozho zhozho2 lislis lls95 lili95 lils5 liss9 sdf0ty987 sdft876 sdft9876 sdf09876 sd0t9876 sdf0ty98 sdf0976 sdf0ty986 sdf0ty96 sdf0t76 sdf0876 df0ty98 sf0t876 sd0ty76 sdy76 sdf76 sdf0t76 sdf0ty9 sdf0ty98 sdf0ty987 sdf0ty98 sdf6676 sdf876 sd876 sd876 sdf6 sdf6 sdf9876 sdf0t sdf06 sdf0ty9776 sdf0ty9776 sdf0ty76 sdf8876 sdf0t sd6 sdf06 s688876 sd688 sdf86