V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
DearTanker
V2EX  ›  Android

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

  •  2
     
  •   DearTanker · 2014-12-16 12:35:32 +08:00 · 16779 次点击
    这是一个创建于 3657 天前的主题,其中的信息可能已经有所发展或是发生改变。
    同样原图,缩放为宽度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
    楼主发现了不得了的秘密...
    我给一个团队写过一个压缩引擎, 就是这样解决的...
    xudshen
        10
    xudshen  
       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   ·   实用小工具   ·   5234 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 08:40 · PVG 16:40 · LAX 00:40 · JFK 03:40
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.