/ \\/ \/ _ \/ _ )/ _ \
\ / __/ _ \ __/
\__\__/\____/\_____/__/ ____ ___
/ _/ / \ \ / _ \/ _/
/ \_/ / / \ \ __/ \__
\____/____/\_____/_____/____/v1.0.2
WebP 编解码器:用于编码和解码 WebP 格式图像的库。此包包含可在其他程序中使用的库以添加 WebP 支持,以及命令行工具 ‘cwebp’ 和 ‘dwebp’。
参见 http://developers.google.com/speed/webp
最新的源码树可在 https://chromium.googlesource.com/webm/libwebp 获取
它基于与 WebM 项目相同的许可证发布。 详见 http://www.webmproject.org/license/software/ 或 “COPYING” 文件。额外的知识产权 授权可在 PATENTS 文件中找到。
通过运行:
nmake /f Makefile.vc CFG=release-static RTLIBCFG=static OBJDIR=output
目录 output\release-static(x64|x86)\bin 将包含工具 cwebp.exe 和 dwebp.exe。目录 output\release-static(x64|x86)\lib 将 包含 libwebp 静态库。 目标架构(x86/x64)由 Makefile.vc 从系统路径中可用的 Visual Studio 编译器(cl.exe)检测。
在安装了 GNU 工具(gcc 和 make)的平台上,运行
make -f makefile.unix
将构建二进制文件 examples/cwebp 和 examples/dwebp,以及 静态库 src/libwebp.a。不提供系统范围的安装, 因为这是基于 autoconf 工具的完整安装系统的简单替代方案(见下文)。 请参考 makefile.unix 以获取更多详细信息和自定义。
前提条件: 一个编译器(如 gcc)、make、autoconf、automake、libtool。 在 Debian 类系统上,以下命令应安装最小构建所需的一切: $ sudo apt-get install gcc make autoconf automake libtool
当从 git 源码构建时,您需要运行 autogen.sh 来生成配置脚本。
./configure make make install
应该就是安装以下文件所需的全部步骤
/usr/local/include/webp/decode.h /usr/local/include/webp/encode.h /usr/local/include/webp/types.h /usr/local/lib/libwebp.* /usr/local/bin/cwebp /usr/local/bin/dwebp
已安装。
注意:一个仅解码的库 libwebpdecoder 可通过 ‘--enable-libwebpdecoder’ 标志获得。编码库是单独构建的,可以 通过对相应的 Makefile.am 配置文件进行微小修改来独立安装(参见其中的注释)。有关更多选项,请参见 ‘./configure --help’。
MIPS Linux 工具链稳定版可在以下地址找到: https://community.imgtec.com/developers/mips/tools/codescape-mips-sdk/available-releases/
export PATH=$PATH:/path/to/toolchain/bin
HOST=mips-mti-linux-gnu
MIPS_CFLAGS="-O3 -mips32r5 -mabi=32 -mtune=p5600 -mmsa -mfp64
-msched-weight -mload-store-pairs -fPIE"
MIPS_LDFLAGS="-mips32r5 -mabi=32 -mmsa -mfp64 -pie"
HOST=mips-img-linux-gnu
MIPS_CFLAGS="-O3 -mips64r6 -mabi=64 -mtune=i6400 -mmsa -mfp64
-msched-weight -mload-store-pairs -fPIE"
MIPS_LDFLAGS="-mips64r6 -mabi=64 -mmsa -mfp64 -pie"
./configure --host=${HOST} --build=config.guess
CC="${HOST}-gcc -EL"
CFLAGS="$MIPS_CFLAGS"
LDFLAGS="$MIPS_LDFLAGS"
make
make install
使用 CMake,您可以编译 libwebp、cwebp、dwebp、gif2web、img2webp、webpinfo 以及 JS 绑定。
前提条件: 一个编译器(如带 autotools 的 gcc)和 CMake。 在 Debian 类系统上,以下命令应安装最小构建所需的一切: $ sudo apt-get install build-essential cmake
当从 git 源码构建时,您需要运行 cmake 来生成 makefile。
mkdir build && cd build && cmake ../ make make install
如果您还需要任何可执行文件,则需要通过 CMake 启用它们,例如:
cmake -DWEBP_BUILD_CWEBP=ON -DWEBP_BUILD_DWEBP=ON ../
或通过您喜欢的界面(如 ccmake 或 cmake-qt-gui)。
使用选项 -DWEBP_UNICODE=ON 为 Windows 提供 Unicode 支持(使用 chcp 65001)。
最后,安装后,您还可以通过以下方式在 CMake 项目中使用 WebP:
find_package(WebP)
这将定义 CMake 变量 WebP_INCLUDE_DIRS 和 WebP_LIBRARIES。
对 Gradle 的支持是最低限度的:它仅帮助您编译 libwebp、cwebp、dwebp 和 webpmux_example。
前提条件: 一个编译器(如带 autotools 的 gcc)和 gradle。 在 Debian 类系统上,以下命令应安装最小构建所需的一切: $ sudo apt-get install build-essential gradle
当从 git 源码构建时,您需要用合适的目标运行 Gradle 包装器,例如:
./gradlew buildAllExecutables
要生成来自 swig/libwebp.swig 的语言绑定,至少需要 swig-1.3 (http://www.swig.org)。
当前以下函数被映射: 解码: WebPGetDecoderVersion WebPGetInfo WebPDecodeRGBA WebPDecodeARGB WebPDecodeBGRA WebPDecodeBGR WebPDecodeRGB
编码: WebPGetEncoderVersion WebPEncodeRGBA WebPEncodeBGRA WebPEncodeRGB WebPEncodeBGR WebPEncodeLosslessRGBA WebPEncodeLosslessBGRA WebPEncodeLosslessRGB WebPEncodeLosslessBGR
详见 swig/README 获取更详细的构建说明。
Java 绑定:
要构建 swig 生成的 JNI 包装代码,至少需要 JDK-1.5(或等价版本)以支持枚举。输出预期为一个共享对象/DLL,可通过 System.loadLibrary("webp_jni") 加载。
Python 绑定:
要构建 swig 生成的 Python 扩展代码,至少需要 Python 2.6。 Python < 2.6 可能通过对 libwebp.swig 或生成的代码进行微小修改来构建,但未经测试。
examples/ 目录包含用于编码(cwebp)和解码(dwebp)图像的工具。
最简单的使用方式如下: cwebp input.png -q 80 -o output.webp 这将使用质量因子 80(0->100 尺度,0 为最低质量,100 为最佳。默认值为 75)将输入文件转换为 WebP 文件。 您可能也想尝试 -lossless 标志,它将在不损失任何信息的情况下压缩源(RGBA 格式)。在这种情况下,-q 质量参数将控制尝试使输出文件尽可能小的处理时间。
更多选项可通过 -longhelp 命令行标志获得:
cwebp -longhelp 用法: cwebp [-preset <...>] [options] in_file [-o out_file]
如果未指定图像的输入尺寸(-s),则假定为 PNG、JPEG、TIFF 或 WebP 文件。
选项: -h / -help ............. 简短帮助 -H / -longhelp ......... 详细帮助 -q ............. 质量因子(0:小..100:大),默认=75 -alpha_q ......... 透明度压缩质量(0..100), 默认=100 -preset ....... 预设设置,可选: default, photo, picture, drawing, icon, text -preset 必须放在首位,因为它会覆盖其他参数 -z ............... 激活无损预设,级别 [0:快, ..., 9:最慢]
-m ............... 压缩方法(0=快速,6=最慢),默认=4 -segments ........ 使用的段数(1..4),默认=4 -size ............ 目标大小(字节) -psnr .......... 目标 PSNR(dB,典型:42)
-s ......... YUV 输入的尺寸(宽度 x 高度) -sns ............. 空间噪声整形(0:关,100:最大),默认=50 -f ............... 滤波强度(0=关..100),默认=60 -sharpness ....... 滤波锐度(0:最锐..7:最不锐),默认=0 -strong ................ 使用强滤波代替简单滤波(默认) -nostrong .............. 使用简单滤波代替强滤波 -sharp_yuv ............. 使用更锐利(且更慢)的 RGB->YUV 转换 -partition_limit . 限制质量以适应第一个分区 512k 限制 (0=无劣化...100=完全) -pass ............ 分析遍数(1..10) -crop .. 用给定矩形裁剪图像 -resize ........ 调整图像大小(在任何裁剪之后) -mt .................... 如果可用则使用多线程 -low_memory ............ 减少内存使用(编码更慢) -map ............. 打印额外信息图 -print_psnr ............ 打印平均 PSNR 失真 -print_ssim ............ 打印平均 SSIM 失真 -print_lsim ............ 打印局部相似性失真 -d <file.pgm> .......... 转储压缩输出(PGM 文件) -alpha_method .... 透明度压缩方法(0..1),默认=1 -alpha_filter . 对 alpha 平面的预测滤波, 可选:none, fast(默认)或 best -exact ................. 保留透明区域中的 RGB 值,默认=关 -blend_alpha ..... 混合颜色与背景色 背景色表示为 RGB 值,以 十六进制书写,例如 0xc0e0d0 表示 red=0xc0 green=0xe0 和 blue=0xd0 -noalpha ............... 丢弃任何透明度信息 -lossless .............. 无损编码图像,默认=关 -near_lossless ... 使用近无损图像 预处理(0..100=关),默认=100 -hint ......... 指定图像特征提示, 可选:photo, picture 或 graph
-metadata ..... 逗号分隔的元数据列表,如果存在则 从输入复制到输出。 有效值:all, none(默认), exif, icc, xmp
-short ................. 精简打印信息 -quiet ................. 不打印任何内容 -version ............... 打印版本号并退出 -noasm ................. 禁用所有汇编优化 -v ..................... 详细输出,例如打印编码/解码时间 -progress .............. 报告编码进度
实验性选项: -jpeg_like ............. 大致匹配预期的 JPEG 大小 -af .................... 自动调整滤波强度 -pre ............. 预处理滤波器
您可能想尝试的主要选项,进一步调整视觉质量,包括: -preset -sns -f -m
即:
在 examples/dwebp.c 中有一个解码示例,它读取 .webp 文件并将其解码为 PNG 图像文件(以及其他格式)。这仅用于演示 API 的使用。您可以通过以下方式验证 test.webp 文件解码后是否与 test_ref.ppm 完全相同:
cd examples ./dwebp test.webp -ppm -o test.ppm diff test.ppm test_ref.ppm
完整的选项列表可通过 -h 获得:
dwebp -h 用法:dwebp in_file [options] [-o out_file]
将 WebP 图像文件解码为 PNG 格式 [默认] 使用以下选项转换为其他图像格式: -pam ......... 将原始 RGBA 样本保存为彩色 PAM -ppm ......... 将原始 RGB 样本保存为彩色 PPM -bmp ......... 保存为未压缩的 BMP 格式 -tiff ........ 保存为未压缩的 TIFF 格式 -pgm ......... 将原始 YUV 样本保存为灰度 PGM 文件,IMC4 布局 -yuv ......... 将原始 YUV 样本保存为扁平布局
其他选项: -version ..... 打印版本号并退出 -nofancy ..... 不使用花哨的 YUV420 升频器 -nofilter .... 禁用环路内滤波 -nodither .... 禁用抖动 -dither .. 抖动强度(0..100) -alpha_dither 如果需要则使用 alpha 平面抖动 -mt .......... 使用多线程 -crop ... 用给定矩形裁剪输出 -resize ......... 缩放输出(在任何裁剪之后) -flip ........ 垂直翻转输出 -alpha ....... 仅保存 alpha 平面 -incremental . 使用增量解码(用于测试) -h ........... 此帮助信息 -v ........... 详细(例如打印编码/解码时间) -quiet ....... 安静模式,不打印任何内容 -noasm ....... 禁用所有汇编优化
‘webpinfo’ 可用于打印 WebP 文件的块级结构和比特流头部信息。它还可以检查文件是否为有效的 WebP 格式。
用法:webpinfo [options] in_files 注意:可以有多个输入文件; 选项必须放在输入文件之前。 选项: -version ........... 打印版本号并退出。 -quiet ............. 不显示块解析信息。 -diag .............. 显示解析错误诊断。 -summary ........... 显示块统计摘要。 -bitstream_info .... 解析比特流头部。
在 examples/ 目录下有一个名为 ‘vwebp’ 的自助可视化工具。它使用 OpenGL 打开一个简单的绘图窗口并显示解码后的 WebP 文件。它尚未集成到 automake 构建系统中,但您可以根据以下建议手动编译它。
用法:vwebp in_file [options]
解码 WebP 图像文件并使用 OpenGL 可视化 选项: -version ..... 打印版本号并退出 -noicc ....... 如果存在则不使用 icc 配置文件 -nofancy ..... 不使用花哨的 YUV420 升频器 -nofilter .... 禁用环路内滤波 -dither 抖动强度(0..100),默认=50 -noalphadither 禁用 alpha 平面抖动 -usebgcolor .. 显示背景色 -mt .......... 使用多线程 -info ........ 打印信息 -h ........... 此帮助信息
键盘快捷键: ‘c’ ................ 切换颜色配置文件的使用 ‘b’ ................ 切换背景色显示 ‘i’ ................ 叠加文件信息 ‘d’ ................ 禁用混合与处理(调试) ‘q’ / ‘Q’ / ESC .... 退出
前提条件:
OpenGL 和 OpenGL 实用工具包(GLUT) Linux: $ sudo apt-get install freeglut3-dev mesa-common-dev Mac + XCode:
(可选)qcms(快速色彩管理系统) i. 从 Mozilla / Chromium 下载 qcms: http://hg.mozilla.org/mozilla-central/file/0e7639e3bdfb/gfx/qcms http://src.chromium.org/viewvc/chrome/trunk/src/third_party/qcms ii. 构建并将源文件归档为 libqcms.a / qcms.lib iii. 更新 makefile.unix / Makefile.vc a) 定义 WEBP_HAVE_QCMS b) 更新包含 / 库路径以引用 qcms 目录。
使用 makefile.unix / Makefile.vc 构建: $ make -f makefile.unix examples/vwebp
nmake /f Makefile.vc CFG=release-static
../obj/x64/release-static/bin/vwebp.exe
工具 ‘img2webp’ 可以将一系列输入图像(PNG、JPEG 等)转换为动画 WebP 文件。它提供对持续时间、编码模式等的精细控制。
用法:
img2webp [file-level options] [image files...] [per-frame options...]
文件级选项(仅在压缩开始时使用): -min_size ............ 最小化大小 -loop .......... 循环次数(默认:0,= 无限循环) -kmax .......... 关键帧之间的最大帧数 (0=仅关键帧) -kmin .......... 关键帧之间的最小帧数 (0=完全禁用关键帧) -mixed ............... 使用混合有损/无损自动模式 -v ................... 详细模式 -h ................... 此帮助 -version ............. 打印版本号并退出
每帧选项(仅用于后续输入的图像): -d ............. 帧持续时间(毫秒)(默认:100) -lossless ........... 使用无损模式(默认) -lossy ... ........... 使用有损模式 -q ........... 质量 -m ............. 使用的方法
示例:img2webp -loop 2 in0.png -lossy in1.jpg -d 80 in2.tiff -o out.webp
注意:如果只传递一个文件名作为参数,参数将从该文件中分词。文件名不得以字符 ‘-’ 开头。
动画 GIF 文件可以使用 examples/ 下的 gif2webp 工具转换为带有动画效果的 WebP 文件。然后可以使用 vwebp 查看这些文件。
用法: gif2webp [options] gif_file -o webp_file 选项: -h / -help ............. 此帮助 -lossy ................. 使用有损压缩编码图像 -mixed ................. 对于图像中的每一帧,启发式地选择有损或无损压缩 -q ............. 质量因子(0:小..100:大) -m ............... 压缩方法(0=快速,6=最慢) -min_size .............. 最小化输出大小(默认:关) 默认使用无损压缩;可以 与 -q、-m、-lossy 或 -mixed 选项结合使用 -kmin ............ 关键帧之间的最小距离 -kmax ............ 关键帧之间的最大距离 -f ............... 滤波强度(0=关..100) -metadata ..... 逗号分隔的元数据列表,如果存在则 从输入复制到输出 有效值:all, none, icc, xmp(默认) -loop_compatibility .... 对 M62 之前(含)的 Chrome 版本使用兼容模式 -mt .................... 如果可用则使用多线程
-version ............... 打印版本号并退出 -v ..................... 详细 -quiet ................. 不打印任何内容
安装 libgif 开发文件后,可以使用 makefile.unix 构建 gif2webp: $ make -f makefile.unix examples/gif2webp
或使用 autoconf: $ ./configure --enable-everything $ make
examples/ 下的测试工具 anim_diff 可用于比较两个动画图像(每个可以是 GIF 或 WebP)。Usage: anim_diff [options]
Options: -dump_frames 将解码帧以 PAM 格式转储到文件夹 -min_psnr ... 每帧最小 PSNR -raw_comparison ..... 若未使用此标志,比较前会对 RGB 进行预乘 -max_diff ..... 后续帧中对应像素间每通道允许的最大差异 -h .................. 此帮助信息 -version ............ 打印版本号并退出
安装 libgif 开发文件和 C++ 编译器后,可使用 makefile.unix 构建 anim_diff: $ make -f makefile.unix examples/anim_diff
或使用 autoconf: $ ./configure --enable-everything $ make
主要编码函数位于头文件 src/webp/encode.h 中。现成可用的函数有: size_t WebPEncodeRGB(const uint8_t* rgb, int width, int height, int stride, float quality_factor, uint8_t** output); size_t WebPEncodeBGR(const uint8_t* bgr, int width, int height, int stride, float quality_factor, uint8_t** output); size_t WebPEncodeRGBA(const uint8_t* rgba, int width, int height, int stride, float quality_factor, uint8_t** output); size_t WebPEncodeBGRA(const uint8_t* bgra, int width, int height, int stride, float quality_factor, uint8_t** output);
它们会将原始 RGB 样本转换为 WebP 数据。唯一可控制的参数是质量因子。
还有一些用于无损格式的变体:
size_t WebPEncodeLosslessRGB(const uint8_t* rgb, int width, int height, int stride, uint8_t** output); size_t WebPEncodeLosslessBGR(const uint8_t* bgr, int width, int height, int stride, uint8_t** output); size_t WebPEncodeLosslessRGBA(const uint8_t* rgba, int width, int height, int stride, uint8_t** output); size_t WebPEncodeLosslessBGRA(const uint8_t* bgra, int width, int height, int stride, uint8_t** output);
当然,这种情况下不需要质量因子,因为压缩过程不会丢失输入值,但代价是输出体积更大。
更高级的 API 基于 WebPConfig 和 WebPPicture 结构体。
WebPConfig 包含编码设置,不与特定图片绑定。 WebPPicture 包含输入数据,将使用某个 WebPConfig 进行压缩。 编码流程如下:
-------------------------------------- BEGIN PSEUDO EXAMPLE
#include <webp/encode.h>
// 设置配置,从预置开始并调整一些附加参数 WebPConfig config; if (!WebPConfigPreset(&config, WEBP_PRESET_PHOTO, quality_factor)) return 0; // 版本错误 } // ... 额外调整 config.sns_strength = 90; config.filter_sharpness = 6; config_error = WebPValidateConfig(&config); // 非强制,但很有用
// 设置输入数据 WebPPicture pic; if (!WebPPictureInit(&pic)) { return 0; // 版本错误 } pic.width = width; pic.height = height; // 分配 width x height 大小的图片 if (!WebPPictureAllocate(&pic)) { return 0; // 内存错误 } // 此时 'pic' 已初始化为容器,可以接收 Y/U/V 样本。 // 或者,可以使用现成的导入函数如 WebPPictureImportRGB(),它会处理内存分配。 // 无论如何,此后的某个时刻,必须调用 WebPPictureFree(&pic) 以回收内存。
// 设置字节输出写入方法。例如 WebPMemoryWriter。 WebPMemoryWriter wrt; WebPMemoryWriterInit(&wrt); // 初始化 'wrt'
pic.writer = MyFileWriter; pic.custom_ptr = my_opaque_structure_to_make_MyFileWriter_work;
// 压缩! int ok = WebPEncode(&config, &pic); // ok = 0 => 发生错误! WebPPictureFree(&pic); // 无论 'ok' 结果如何,都必须调用。
// 此时输出数据应由 writer 处理。 // -> 压缩数据是 wrt.mem / wrt.size 描述的内存缓冲区
// 释放压缩数据使用的内存 WebPMemoryWriterClear(&wrt);
-------------------------------------- END PSEUDO EXAMPLE
主要只需调用一个函数:
#include "webp/decode.h" uint8_t* WebPDecodeRGB(const uint8_t* data, size_t data_size, int* width, int* height);
请参阅 src/webp/decode.h 文件了解详情。有用于 BGR/RGBA/ARGB/BGRA 顺序解码的变体,以及解码为原始 Y'CbCr 样本的变体。也可以将图像直接解码到预分配的缓冲区中。
要检测 WebP 文件并获取图片尺寸,提供了以下函数: int WebPGetInfo(const uint8_t* data, size_t data_size, int* width, int* height); 使用该函数时不涉及解码。
当数据逐步传输时,仍可使用稍复杂的 API 进行增量解码。解码器状态存储在 WebPIDecoder 对象的实例中。可以创建该对象用于解码 RGB 或 Y'CbCr 样本。例如:
WebPDecBuffer buffer; WebPInitDecBuffer(&buffer); buffer.colorspace = MODE_BGR; ... WebPIDecoder* idec = WebPINewDecoder(&buffer);
随着数据逐步可用,此增量解码器对象可用于进一步解码图片。有两种(互斥的)方式传递新到达的数据:
要么追加新字节:
WebPIAppend(idec, fresh_data, size_of_fresh_data);
要么仅提及传输数据的新大小:
WebPIUpdate(idec, buffer, size_of_transmitted_buffer);
请注意,每次调用 WebPIUpdate 之间可以修改 'buffer',特别是当调整缓冲区大小以容纳更大数据时。
这些函数将返回解码状态:如果解码尚未完成则返回 VP8_STATUS_SUSPENDED,解码完成则返回 VP8_STATUS_OK。其他任何状态均为错误条件。
必须始终(即使在错误条件下)通过调用 WebPDelete(idec) 释放 'idec' 对象。
要检索部分解码的图片样本,必须使用相应方法:WebPIDecGetRGB 或 WebPIDecGetYUVA。它们会返回最后可显示的像素行。
最后,请注意,解码也可以直接进入预分配的像素缓冲区。该缓冲区必须在创建 WebPIDecoder 时通过调用 WebPINewRGB() 或 WebPINewYUVA() 传入。
请参阅 src/webp/decode.h 头文件以了解更多细节。
WebP 解码支持高级 API,提供即时裁剪和缩放功能,这在内存受限环境(如手机)中非常有用。基本上,如果只需要快速预览或放大查看过大的图片的一部分,内存使用量将随输出大小而非输入大小缩放。同时也能节省一些 CPU。
-------------------------------------- BEGIN PSEUDO EXAMPLE // A) 初始化配置对象 WebPDecoderConfig config; CHECK(WebPInitDecoderConfig(&config));
// B) 可选:检索比特流特征。
CHECK(WebPGetFeatures(data, data_size, &config.input) == VP8_STATUS_OK);
// C) 如有需要,调整 'config' 选项
config.options.no_fancy_upsampling = 1;
config.options.use_scaling = 1;
config.options.scaled_width = scaledWidth();
config.options.scaled_height = scaledHeight();
// 等等。
// D) 指定 'config' 输出选项以指定输出色彩空间。
// 也可以选择指定外部图像解码缓冲区。
config.output.colorspace = MODE_BGRA;
// 可选地,config.output 可以指向外部缓冲区以解码图像。
// 此外部提供的内存缓冲区应足够大以存储解码后的图片。
config.output.u.RGBA.rgba = (uint8_t*) memory_buffer;
config.output.u.RGBA.stride = scanline_stride;
config.output.u.RGBA.size = total_size_of_the_memory_buffer;
config.output.is_external_memory = 1;
// E) 解码 WebP 图像。关于解码图像有两种变体。
// 第一种 (E.1) 解码完整图像,第二种 (E.2) 用于使用小输入缓冲区增量解码图像。
// 可使用其中任一步骤解码 WebP 图像。
// E.1) 解码完整图像。
CHECK(WebPDecode(data, data_size, &config) == VP8_STATUS_OK);
// E.2) 增量解码图像。
WebPIDecoder* const idec = WebPIDecode(NULL, NULL, &config);
CHECK(idec != NULL);
while (bytes_remaining > 0) {
VP8StatusCode status = WebPIAppend(idec, input, bytes_read);
if (status == VP8_STATUS_OK || status == VP8_STATUS_SUSPENDED) {
bytes_remaining -= bytes_read;
} else {
break;
}
}
WebPIDelete(idec);
// F) 解码后的图像现在位于 config.output(以及 config.output.u.RGBA)中。
// 可以保存、显示或以其他方式处理。
// G) 回收 config 对象中分配的内存。即使内存是外部的且不是由 WebPDecode() 分配的,
// 调用此函数也是安全的。
WebPFreeDecBuffer(&config.output);
-------------------------------------- END PSEUDO EXAMPLE
请将所有错误报告提交到问题跟踪器: https://bugs.chromium.org/p/webp 欢迎提交补丁!请参阅此页面开始: http://www.webmproject.org/code/contribute/submitting-patches/
电子邮件:[email protected] Web:http://groups.google.com/a/webmproject.org/group/webp-discuss