温馨提示×

如何使用Debian CxImage进行图片压缩

小樊
41
2025-12-28 21:03:13
栏目: 智能运维

在 Debian 上使用 CxImage 进行图片压缩

一 安装与准备

  • Debian 上安装开发包:sudo apt-get update && sudo apt-get install libcximage-dev。该库支持 JPEG/PNG/BMP 等多种格式,适合做有损压缩(如 JPEG 质量调节)与格式转换。若后续编译时报链接或格式相关错误,按需补充安装 libjpeg-dev、libpng-dev、libtiff-dev 等依赖。CxImage 提供 C++ 类 CxImageC 接口(CXIMAGE),可按项目语言选择使用。

二 C++ 示例 最小可用压缩

  • 思路:加载源图 → 设置 JPEG 质量 → 保存为输出文件。质量取值 0–100,数值越小压缩率越高、质量越低。
  • 代码示例(保存为 compress.cpp):
#include <iostream>
#include <cximage.h>

int main(int argc, char* argv[]) {
    if (argc != 3) {
        std::cerr << "用法: " << argv[0] << " <input> <output>\n";
        return 1;
    }
    const char* in  = argv[1];
    const char* out = argv[2];

    CxImage image;
    if (!image.Load(in)) {
        std::cerr << "加载失败: " << in << "\n";
        return 1;
    }

    image.SetJpegQuality(80); // 质量 0–100,按需调整

    if (!image.Save(out)) {
        std::cerr << "保存失败: " << out << "\n";
        return 1;
    }

    std::cout << "已保存: " << out << "\n";
    return 0;
}
  • 编译与运行:g++ -o compress compress.cpp -lcximage;./compress input.jpg output.jpg。

三 C 示例 命令行式压缩

  • 思路:使用 CXIMAGE C 接口加载、设置 JPEG 质量、保存。
  • 代码示例(保存为 compress_c.c):
#include <stdio.h>
#include <stdlib.h>
#include <cximage.h>

int main(int argc, char *argv[]) {
    if (argc != 3) {
        fprintf(stderr, "用法: %s <input> <output>\n", argv[0]);
        return 1;
    }
    const char *input_filename  = argv[1];
    const char *output_filename = argv[2];

    CXIMAGE image;
    if (!image.Load(input_filename)) {
        fprintf(stderr, "加载失败: %s\n", input_filename);
        return 1;
    }

    image.SetJpegQuality(80);

    if (!image.Save(output_filename, CXIMAGE_FORMAT_JPEG)) {
        fprintf(stderr, "保存失败: %s\n", output_filename);
        return 1;
    }

    printf("已保存: %s\n", output_filename);
    return 0;
}
  • 编译与运行:gcc -o compress_c compress_c.c -lcximage;./compress_c input.jpg output.jpg。

四 进阶优化与批量处理

  • 进阶优化
    • 调整分辨率:image.Resample(宽, 高),先降分辨率通常能显著降低体积。
    • 色彩与效果:image.GrayScale()、image.AdjustBrightness(20)、image.AdjustContrast(1.2)、image.AdjustSaturation(0.8) 等,可在压缩前做视觉优化。
    • 格式选择:照片类优先 JPEG(可调质量),图标/需要透明背景用 PNG(无损,体积相对更大)。
  • 批量处理思路
    • bash 遍历目录,逐个调用编译好的压缩程序;示例(compress 为上节生成的可执行文件):
#!/usr/bin/env bash
INPUT_DIR="./images"
QUALITY=80
OUT_SUFFIX="_compressed"

for f in "$INPUT_DIR"/*.{jpg,jpeg,png}; do
    [[ -e "$f" ]] || continue
    ext="${f##*.}"
    out="${f%.*}${OUT_SUFFIX}.jpg"
    ./compress "$f" "$out"
done
  • 常见问题与提示
    • 链接失败:确认已安装 libcximage-dev 并使用 -lcximage;若报格式相关未定义,补充安装 libjpeg-dev、libpng-dev、libtiff-dev
    • 质量取值:0–100,建议从 80 开始按观感微调。
    • 透明背景:若源图为 PNG 且需保留透明,请保存为 PNG;转 JPEG 会丢失透明通道。
    • 大图优化:优先 Resample 到目标展示尺寸,再压缩,通常比仅调质量更有效。

0