前言 俗话说,谷歌大法好,WebP
是由谷歌公司推出的图片文件格式,支持有损、无损压缩。从官方文档 ,可以看到如下图所示的对比,大意就是压缩率比PNG、JPEG等高。腾讯也对WebP
做了测试,测试链接请戳这里 。现在,很多公司都已经开始使用WebP
格式,国内如腾讯、淘宝、今日头条等等。
iOS WebP 示例 iOS原生肯定是不支持WebP
格式的,接下来,将介绍三种方法来展示在iOS端如何支持WebP
格式:
编译源代码 从官网下载WebP
库的源代码,下载地址请戳这里 ,下载如下图所示的部分,下载后是一个tar
文件,名字类似于 libwebp-0.5.1.tar
,创建一个build
文件夹,将该压缩文件放到build
目录,然后再创建一个build.sh
的shell文件,该文件用来生成通用的framework
,代码如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 #!/bin/sh # # Note: This build script assumes it can find the archive for libwebp # in the current directory. You can download it from the following URL: # http://code.google.com/speed/webp/download.html # # The resulting framework will can be found in the current directory # with the name WebP.framework # SDK=9.3 #改成自己的SDK版本 PLATFORMS="iPhoneSimulator iPhoneSimulator-64 iPhoneOS-V7 iPhoneOS-V7s iPhoneOS-ARM64" DEVELOPER=`xcode-select -print-path` TOPDIR=`pwd` BUILDDIR="$TOPDIR/tmp" FINALDIR="$TOPDIR/WebP.framework" LIBLIST='' DEVROOT="${DEVELOPER}/Toolchains/XcodeDefault.xctoolchain" mkdir -p $BUILDDIR mkdir -p $FINALDIR mkdir $FINALDIR/Headers/ for PLATFORM in ${PLATFORMS} do if [ "${PLATFORM}" == "iPhoneOS-V7" ] then SDKPATH="${DEVELOPER}/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.3.sdk/" #改成自己的SDK版本 ARCH="armv7" HOST=${ARCH}-apple-darwin elif [ "${PLATFORM}" == "iPhoneOS-V7s" ] then SDKPATH="${DEVELOPER}/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.3.sdk/" #改成自己的SDK版本 ARCH="armv7s" HOST=${ARCH}-apple-darwin elif [ "${PLATFORM}" == "iPhoneOS-ARM64" ] then SDKPATH="${DEVELOPER}/Platforms/iPhoneOS.platform/Developer/SDKs/iPhoneOS9.3.sdk/" #改成自己的SDK版本 ARCH="arm64" HOST="aarch64-apple-darwin" elif [ "${PLATFORM}" == "iPhoneSimulator-64" ] then SDKPATH="${DEVELOPER}/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator9.3.sdk/" #改成自己的SDK版本 ARCH="x86_64" HOST=${ARCH}-apple-darwin else SDKPATH="${DEVELOPER}/Platforms/iPhoneSimulator.platform/Developer/SDKs/iPhoneSimulator9.3.sdk/" #改成自己的SDK版本 ARCH="i386" HOST=${ARCH}-apple-darwin fi export CC=${DEVROOT}/usr/bin/cc export LD=${DEVROOT}/usr/bin/ld export CPP=${DEVROOT}/usr/bin/cpp export CXX=${DEVROOT}/usr/bin/g++ export AR=${DEVROOT}/usr/bin/ar export AS=${DEVROOT}/usr/bin/as export NM=${DEVROOT}/usr/bin/nm export CXXCPP=${DEVROOT}/usr/bin/cpp export RANLIB=${DEVROOT}/usr/bin/ranlib rm -rf libwebp-0.5.1 #根据自己的libwebp版本 tar xzf libwebp-0.5.1.tar cd libwebp-0.5.1 sh autogen.sh ROOTDIR="/tmp/install.$$.${ARCH}" rm -rf "${ROOTDIR}" mkdir -p "${ROOTDIR}" export LDFLAGS="-arch ${ARCH} -miphoneos-version-min=7.0 -pipe -isysroot ${SDKPATH} -O3 -DNDEBUG" export CFLAGS="-arch ${ARCH} -miphoneos-version-min=7.0 -pipe -isysroot ${SDKPATH} -O3 -DNDEBUG" export CXXFLAGS="-arch ${ARCH} -miphoneos-version-min=7.0 -pipe -isysroot ${SDKPATH} -O3 -DNDEBUG" ./configure --host=${HOST} --prefix=${ROOTDIR} --disable-shared --enable-static \ --enable-libwebpdecoder --enable-swap-16bit-csp --build=$(./config.guess) make make install LIBLIST="${LIBLIST} ${ROOTDIR}/lib/libwebp.a" cp -Rp ${ROOTDIR}/include/webp/* $FINALDIR/Headers/ cd .. done ${DEVROOT}/usr/bin/lipo -create $LIBLIST -output $FINALDIR/WebP rm -rf libwebp-0.5.1 rm -rf ${BUILDDIR}
上面的代码需要注意的几个地方,就是SDKPath
、SDK
变量需改成自己Xcode的SDK的版本号,因为我这个实例用的是libwebp-0.5.1
版本,如果用的是其他的版本,则需要把脚本中的所有libwebp-0.5.1
替换成你自己的版本名。一切妥当后,执行./build.sh
命令,最后会生成一个WebP.framework
框架,将其添加到自己的项目中,然后在Build Settings
的Framework Search Paths
中添加WebP.framework
框架所在的目录路径即可。
直接使用官方编译好的framework
直接使用官方编译好的framework
,下载地址请戳这里 ,下载如下如图所示的文件,下载完之后直接改名为WebP.framework
,添加到项目中,同样,在Build Settings
的Framework Search Paths
中添加WebP.framework
框架所在的目录路径即可。
项目示例请戳这里 ,欢迎Star。
SDWebImage SDWebImage 支持WebP
格式,但是默认不开启,需要添加SubSpecs,具体步骤参看SDWebImage
官方说明。