Ubuntu下批量处理CxImage,图片处理效率能翻倍提升吗?
- 内容介绍
- 文章标签
- 相关推荐
一、使用者痛点:为何需要高效批量处理?
在日常工作中。设计师、开发者或运维人员常面临以下困扰:
- 重复操作耗时手动打开每张图片、调整大小、旋转或添加水印,几十上百张文件需要耗费数小时。其实,
- 易错率高手工逐个处理容易漏掉某些文件或参数设置不一致。导致最终输出质量参差不齐。
- 环境限制在 Ubuntu 上缺少现成的批处理工具。只能依赖 Windows 软件或在线服务,增加了跨网站迁移成本。
- 资源浪费: 频繁启动图形界面程序占用大量内存和 CPU,影响其他任务的进行。话说回来,
这些痛点直接拖慢了项目进度和个人效率。如果能够通过脚本实现“一键批量处理”,不仅能解放双手。还能将处理时间压缩至原来的一半甚至更低。
二、前置条件:确保程序与依赖已就绪
1. 程序版本检查
建议使用 Ubuntu 20.04 LTS 或更高版本,以获得较新的软件仓库支持。
2. 基础工具安装
sudo apt update
sudo apt install -y python3 python3-pip git
三、安装 CxImage 库
CxImage 是一个跨网站的 C++ 图像处理库。提供 Python 绑定,可直接在脚本中调用。
1. 通过 APT 安装开发包
sudo apt install -y libcximage-dev
此方式会自动拉取 libpng、libjpeg、libtiff 等依赖。
2. 若需当前版本则自行编译
# 下载源码
wget https://github.com/imagemagick/cximage/archive/refs/tags/v1.9.5.tar.gz
tar -xzvf v1.9.5.tar.gz
cd cximage-1.9.5
mkdir build && cd build
cmake ..
make -j$
sudo make install
四、编写批量处理 Python 脚本
下面给出一个完整且易于修改的示例脚本 batch_process_images.py
1. 脚本结构说明(
)
-
org/导入模块**:
org.os、cxImage.Image -
org/主要函数**:
org.process_image 负责单张图片的读取、处理与保存;org.batch_process_images 负责遍历目录并调用 org.process_image - org/主入口**:通过命令行参数或硬编码方法指定输入/输出目录还有处理参数。
2. 完整代码(
)
)
#!话说回来,/usr/bin/env python3
# -*- coding: utf-8 -*-
import os
import sys
from cxImage import Image # CxImage 的 Python 绑定
def process_image(input_path: str。output_path: str,width: int = None,height: int = None,rotate_angle: float = 0.0) -> bool:
"""
对单张图片进行缩放、旋转并保存。:return: True 表示成功,False 表示失败。"""
再看try,img = Image
if img.IsNull:
print
return False
# 按需求进行尺寸调整
if width and height:
img.resize
# 按需求进行旋转
if rotate_angle!按理说,= 0:
img.rotate
# 保存结果;自动根据文件
名选择编码格式
if not img.save:
print
return False
print
return True
except Exception as e:
print
return False
def batch_process_images(input_dir: str。output_dir: str,width: int = None,height: int = None,rotate_angle: float = 0.0) -> None:
"""
遍历 input_dir 中所有支持的图片文件,调用 process_image 进行统一处理并将结果写入 output_dir。"""
# 确保输出目录存在
os.makedirs
# 支持的后缀列表
IMG_EXTS = {'.jpg','.jpeg','.png','.bmp','.tiff','.gif'}
processed_cnt = 0
failed_cnt = 0
for filename in os.listdir:
name,ext = os.path.splitext
if ext.lower not in IMG_EXTS:
continue # 跳过非图片文件
src_path = os.path.join
dst_name = f"{name}_processed{ext}"
dst_path = os.path.join
if process_image(src_path,dst_path。width=width,height=height,rotate_angle=rotate_angle):
processed_cnt += 1
再看else,failed_cnt += 1
print
print
print
print}")
if __name__ == "__main__":
# ---- 使用者可自行修改以下参数 ----
INPUT_DIR = "/home/user/pictures/raw"
OUTPUT_DIR = "/home/user/pictures/processed"
TARGET_W = 800 # 若设为 None 时不做缩放宽度限制
TARGET_H = 600 # 同上 高度限制
ROTATE_DEG = 90 # 順時針旋轉角度;設為0表示不旋轉
batch_process_images(INPUT_DIR,OUTPUT_DIR,width=TARGET_W,height=TARGET_H。rotate_angle=ROTATE_DEG)
- org/赋予执行权限**: org/chmod +x batchprocessimages.py org>org/org>org/org>org/org/org/org/org/org>org/org.org.org.org.org.org.org.org.org.org.org.org.org.org.org.org.org.org.org...
一、使用者痛点:为何需要高效批量处理?
在日常工作中。设计师、开发者或运维人员常面临以下困扰:
- 重复操作耗时手动打开每张图片、调整大小、旋转或添加水印,几十上百张文件需要耗费数小时。其实,
- 易错率高手工逐个处理容易漏掉某些文件或参数设置不一致。导致最终输出质量参差不齐。
- 环境限制在 Ubuntu 上缺少现成的批处理工具。只能依赖 Windows 软件或在线服务,增加了跨网站迁移成本。
- 资源浪费: 频繁启动图形界面程序占用大量内存和 CPU,影响其他任务的进行。话说回来,
这些痛点直接拖慢了项目进度和个人效率。如果能够通过脚本实现“一键批量处理”,不仅能解放双手。还能将处理时间压缩至原来的一半甚至更低。
二、前置条件:确保程序与依赖已就绪
1. 程序版本检查
建议使用 Ubuntu 20.04 LTS 或更高版本,以获得较新的软件仓库支持。
2. 基础工具安装
sudo apt update
sudo apt install -y python3 python3-pip git
三、安装 CxImage 库
CxImage 是一个跨网站的 C++ 图像处理库。提供 Python 绑定,可直接在脚本中调用。
1. 通过 APT 安装开发包
sudo apt install -y libcximage-dev
此方式会自动拉取 libpng、libjpeg、libtiff 等依赖。
2. 若需当前版本则自行编译
# 下载源码
wget https://github.com/imagemagick/cximage/archive/refs/tags/v1.9.5.tar.gz
tar -xzvf v1.9.5.tar.gz
cd cximage-1.9.5
mkdir build && cd build
cmake ..
make -j$
sudo make install
四、编写批量处理 Python 脚本
下面给出一个完整且易于修改的示例脚本 batch_process_images.py
1. 脚本结构说明(
)
-
org/导入模块**:
org.os、cxImage.Image -
org/主要函数**:
org.process_image 负责单张图片的读取、处理与保存;org.batch_process_images 负责遍历目录并调用 org.process_image - org/主入口**:通过命令行参数或硬编码方法指定输入/输出目录还有处理参数。
2. 完整代码(
)
)
#!话说回来,/usr/bin/env python3
# -*- coding: utf-8 -*-
import os
import sys
from cxImage import Image # CxImage 的 Python 绑定
def process_image(input_path: str。output_path: str,width: int = None,height: int = None,rotate_angle: float = 0.0) -> bool:
"""
对单张图片进行缩放、旋转并保存。:return: True 表示成功,False 表示失败。"""
再看try,img = Image
if img.IsNull:
print
return False
# 按需求进行尺寸调整
if width and height:
img.resize
# 按需求进行旋转
if rotate_angle!按理说,= 0:
img.rotate
# 保存结果;自动根据文件
名选择编码格式
if not img.save:
print
return False
print
return True
except Exception as e:
print
return False
def batch_process_images(input_dir: str。output_dir: str,width: int = None,height: int = None,rotate_angle: float = 0.0) -> None:
"""
遍历 input_dir 中所有支持的图片文件,调用 process_image 进行统一处理并将结果写入 output_dir。"""
# 确保输出目录存在
os.makedirs
# 支持的后缀列表
IMG_EXTS = {'.jpg','.jpeg','.png','.bmp','.tiff','.gif'}
processed_cnt = 0
failed_cnt = 0
for filename in os.listdir:
name,ext = os.path.splitext
if ext.lower not in IMG_EXTS:
continue # 跳过非图片文件
src_path = os.path.join
dst_name = f"{name}_processed{ext}"
dst_path = os.path.join
if process_image(src_path,dst_path。width=width,height=height,rotate_angle=rotate_angle):
processed_cnt += 1
再看else,failed_cnt += 1
print
print
print
print}")
if __name__ == "__main__":
# ---- 使用者可自行修改以下参数 ----
INPUT_DIR = "/home/user/pictures/raw"
OUTPUT_DIR = "/home/user/pictures/processed"
TARGET_W = 800 # 若设为 None 时不做缩放宽度限制
TARGET_H = 600 # 同上 高度限制
ROTATE_DEG = 90 # 順時針旋轉角度;設為0表示不旋轉
batch_process_images(INPUT_DIR,OUTPUT_DIR,width=TARGET_W,height=TARGET_H。rotate_angle=ROTATE_DEG)
- org/赋予执行权限**: org/chmod +x batchprocessimages.py org>org/org>org/org>org/org/org/org/org/org>org/org.org.org.org.org.org.org.org.org.org.org.org.org.org.org.org.org.org.org...

