Ubuntu CxImage自定义设置
小樊
32
2025-12-20 15:45:31
Ubuntu 下 CxImage 自定义设置指南
一 环境准备与源码获取
- 安装构建工具与图像依赖:
- 构建工具:build-essential cmake
- 图像库:libpng-dev libjpeg-dev libtiff-dev libgif-dev
- 可选:libwebp-dev(启用 WebP 支持)
- 获取源码(任选其一,注意不同仓库的 API/构建系统 可能不同):
- git clone https://github.com/antaresware/cximage.git
- git clone https://github.com/antoniogarrote/cxImage.git
- 建议目录结构:将源码放在如 ~/src/cximage 下,便于多版本管理。
二 自定义构建与安装路径
- 标准构建安装(默认安装到 /usr/local):
- mkdir build && cd build
- cmake -DCMAKE_BUILD_TYPE=Release …
- make -j$(nproc)
- sudo make install
- 自定义安装前缀(便于多版本并存与打包):
- cmake -DCMAKE_INSTALL_PREFIX=/opt/cximage/3.0 -DCMAKE_BUILD_TYPE=Release …
- make -j$(nproc) && sudo make install
- 安装后头文件与库的典型路径:
- 头文件:/opt/cximage/3.0/include
- 库文件:/opt/cximage/3.0/lib/libcximage.so
- 后续项目编译示例(按你的前缀调整 -I/-L/-l):
- g++ app.cpp -o app -I/opt/cximage/3.0/include -L/opt/cximage/3.0/lib -lcximage
- 若使用系统包管理器安装开发包(如 libcximage-dev),可直接获得头文件与库,但自定义能力受限;源码构建便于开启/关闭编解码器与做深度定制。
三 启用或禁用编解码器与功能开关
- 常见做法(不同仓库可能提供不同的 CMake 选项或 config 头):
- 开启 WebP:安装 libwebp-dev,在 CMake 中打开相应开关(如 -DWITH_WEBP=ON),随后重新构建安装。
- 开启 TIFF/GIF:安装 libtiff-dev/libgif-dev,并在构建配置中启用相关选项(如 -DWITH_TIFF=ON -DWITH_GIF=ON)。
- 关闭不需要的编解码器:关闭相应开关以减少依赖与体积(如 -DWITH_JPEG=OFF 等)。
- 验证编解码器是否生效(C++ 示例):
- #include <cximage.h>
int main(){ CXImage i; i.Load(“test.png”); i.Save(“out.jpg”); return 0; }
- 编译:g++ demo.cpp -I/opt/cximage/3.0/include -L/opt/cximage/3.0/lib -lcximage
- 若保存失败,通常是对应编码器未启用或库未安装。
- 提示:不同仓库的开关名称与默认行为可能不同,请以实际仓库的 CMakeLists.txt/README 为准。
四 自定义滤镜与处理管线
- 思路:在你的应用中链接 libcximage,对 CxImage 对象进行处理后保存。
- 示例(灰度滤镜):
- #include <cximage.h>
bool Grayscale(CxImage& img){ if(img.IsNull()) return false; long w=img.GetWidth(),h=img.GetHeight(); for(long y=0;y<h;++y){ for(long x=0;x<w;++x){ RGBQUAD c; img.GetPixelColor(x,y,&c); BYTE g=(BYTE)(0.299c.rgbRed+0.587c.rgbGreen+0.114c.rgbBlue); c.rgbRed=c.rgbGreen=c.rgbBlue=g; img.SetPixelColor(x,y,&c); } } return true; }
int main(int argc,char argv[]){ if(argc!=3){ printf(“Usage: %s in out\n”,argv[0]); return 1; } CxImage img; if(!img.Load(argv[1])) return 1; Grayscale(img); img.Save(argv[2]); return 0; }
- 编译:g++ -o custom_filter custom_filter.cpp -I/opt/cximage/3.0/include -L/opt/cximage/3.0/lib -lcximage
- 运行:./custom_filter input.jpg output.jpg
- 扩展建议:
- 性能优化:对大图按分块/多线程处理,必要时使用 SIMD(如 SSE/AVX)。
- 管线组合:Resize → Filter → FormatConvert,统一在内存中完成,减少磁盘 I/O。
五 运行环境与常见问题处理
- 运行时库路径:
- 若安装到 /usr/local 或自定义前缀,运行前确保动态库可被找到:
- 临时:export LD_LIBRARY_PATH=/opt/cximage/3.0/lib:$LD_LIBRARY_PATH
- 永久:写入 /etc/ld.so.conf.d/cximage.conf(内容为:/opt/cximage/3.0/lib),然后执行 sudo ldconfig
- 头文件与链接路径(开发时):
- 可写入 ~/.bashrc 或项目 CMakeLists.txt 的 include_directories / link_directories,便于统一管理多个版本。
- 常见问题速查:
- 找不到头文件:检查 -I 路径是否为你的安装前缀 include。
- 链接失败:检查 -L 路径与 -lcximage 名称,确认库文件存在。
- 保存失败(如 JPG/PNG 不支持):确认相应编解码器已启用且依赖库已安装,再重新构建安装。
- 多版本并存:使用不同的 CMAKE_INSTALL_PREFIX,通过 LD_LIBRARY_PATH 或 ldconfig 精确切换运行时版本。