记录一个为打印高清而做投喂图像增强的例子

最近偶然接触到一个需求,打印机打印结果不清晰。需要打印之前做一下处理。
第一个想法是DPI 不够?
第二个想法是不要直接打印,转成PDF 后投喂打印?
第三个想法是先做打印前的增强处理。
总之就是输入到打印机的图片还是别jpge格式了吧,no 压缩,用tif或者pdf 挺好的。然后需要做一下打印前的增强工作。
下面有两段源码,测试了一下,有一个明显的效果。具体如下:
(1)输入输出都是jpg(我是觉得给打印机就不要这个格式了,但是有时候不得已)

import cv2
import numpy as np
from PIL import Image

def upscale_image(img, target_dpi=300, original_dpi=96):
    # 基于 DPI 比例进行图像放大
    scale = target_dpi / original_dpi
    new_size = (int(img.shape[1] * scale), int(img.shape[0] * scale))
    return cv2.resize(img, new_size, interpolation=cv2.INTER_CUBIC)

def enhance_saturation(img, factor=1.2):
    # HSV 模式增强饱和度
    hsv = cv2.cvtColor(img, cv2.COLOR_BGR2HSV).astype(np.float32)
    h, s, v = cv2.split(hsv)
    s *= factor
    s = np.clip(s, 0, 255)
    enhanced = cv2.merge([h, s, v])
    return cv2.cvtColor(enhanced.astype(np.uint8), cv2.COLOR_HSV2BGR)

def apply_clahe(img):
    # LAB空间增强亮度细节(自适应直方图均衡)
    lab = cv2.cvtColor(img, cv2.COLOR_BGR2LAB)
    l, a, b = cv2.split(lab)
    clahe = cv2.createCLAHE(clipLimit=2.0, tileGridSize=(8,8))
    l2 = clahe.apply(l)
    lab_enhanced = cv2.merge((l2, a, b))
    return cv2.cvtColor(lab_enhanced, cv2.COLOR_LAB2BGR)

def unsharp_mask(img, sigma=1.0, strength=1.5):
    # 高斯模糊 + 反差增强
    blurred = cv2.GaussianBlur(img, (0, 0), sigma)
    sharpened = cv2.addWeighted(img, 1 + strength, blurred, -strength, 0)
    return sharpened

def rgb_to_cmyk_pil(img_path, save_path='cmyk_preview.jpg'):
    # 使用 PIL 模拟转换为 CMYK 并保存
    rgb = Image.open(img_path).convert('RGB')
    cmyk = rgb.convert('CMYK')
    cmyk.save(save_path)
    print(f"CMYK模拟图已保存为: {save_path}")

def process_image_for_printing(input_path, output_path='output_print_ready.jpg'):
    img = cv2.imread(input_path)
    print("[INFO] 原始图像尺寸:", img.shape)

    # 1. 放大到适合打印的分辨率
    img = upscale_image(img, target_dpi=300)
    print("[INFO] 已进行分辨率放大")

    # 2. 增强饱和度
    img = enhance_saturation(img, factor=1.2)
    print("[INFO] 已增强色彩饱和度")

    # 3. CLAHE 亮度细节增强
    img = apply_clahe(img)
    print("[INFO] 已增强亮度细节 (CLAHE)")

    # 4. 锐化图像
    img = unsharp_mask(img, sigma=1.0, strength=1.2)
    print("[INFO] 已进行图像锐化 (Unsharp Mask)")

    # 5. 保存增强后的图像(BGR 转 RGB)
    cv2.imwrite(output_path, img)
    print(f"[INFO] 处理完成,输出文件保存为:{output_path}")

    # 6. 可选:CMYK 模拟转换
    rgb_to_cmyk_pil(output_path, save_path='cmyk_preview.jpg')

# 运行示例
if __name__ == '__main__':
    input_image_path = 'test_print.jpg'  # ← 替换为你的图像路径
    process_image_for_printing(input_image_path)

(2)输入png,输出是tif或者PDF

import cv2
import numpy as np
from PIL import Image

def enhance_image(img_bgr):
    """执行图像增强操作"""
    # 放大图像(2x 分辨率)
    img_bgr = cv2.resize(img_bgr, (img_bgr.shape[1]*2, img_bgr.shape[0]*2), interpolation=cv2.INTER_CUBIC)

    # 饱和度增强(BGR → HSV)
    hsv = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2HSV).astype(np.float32)
    h, s, v = cv2.split(hsv)
    s = np.clip(s * 1.3, 0, 255)
    hsv = cv2.merge([h, s, v])
    img_bgr = cv2.cvtColor(hsv.astype(np.uint8), cv2.COLOR_HSV2BGR)

    # 亮度增强(CLAHE + LAB)
    lab = cv2.cvtColor(img_bgr, cv2.COLOR_BGR2LAB)
    l, a, b = cv2.split(lab)
    clahe = cv2.createCLAHE(clipLimit=2.5, tileGridSize=(8, 8))
    l = clahe.apply(l)
    lab = cv2.merge([l, a, b])
    img_bgr = cv2.cvtColor(lab, cv2.COLOR_LAB2BGR)

    # 锐化(Unsharp Mask)
    blurred = cv2.GaussianBlur(img_bgr, (0, 0), sigmaX=1.2)
    sharpened = cv2.addWeighted(img_bgr, 1.5, blurred, -0.5, 0)

    return sharpened

def save_as_tiff_cmyk(rgb_image, output_path):
    """RGB 转为 CMYK 并保存为 TIFF"""
    pil_rgb = Image.fromarray(rgb_image)
    pil_cmyk = pil_rgb.convert('CMYK')
    pil_cmyk.save(output_path, format='TIFF', compression='tiff_lzw')
    print(f" 已保存为高质量 CMYK TIFF 文件: {output_path}")

def save_as_pdf(rgb_image, output_path):
    """保存为 RGB PDF(用于图文打印)"""
    pil_rgb = Image.fromarray(rgb_image)
    pil_rgb.save(output_path, format='PDF', resolution=300.0)
    print(f"已保存为高质量 PDF 文件: {output_path}")

def process_png_for_print(input_png, output_tiff='output_print_ready.tif', output_pdf='output_print_ready.pdf'):
    """主流程:从 PNG → 增强 → 输出 TIFF & PDF"""
    # 读取 PNG 图像(BGR 格式)
    img_bgr = cv2.imread(input_png, cv2.IMREAD_COLOR)
    if img_bgr is None:
        raise FileNotFoundError(f"无法读取图像:{input_png}")
    print(f"读取图像尺寸: {img_bgr.shape[1]}x{img_bgr.shape[0]}")

    # 图像增强
    enhanced_bgr = enhance_image(img_bgr)

    # BGR → RGB
    enhanced_rgb = cv2.cvtColor(enhanced_bgr, cv2.COLOR_BGR2RGB)

    # 保存为 TIFF (CMYK)
    save_as_tiff_cmyk(enhanced_rgb, output_tiff)

    # 保存为 PDF (RGB)
    save_as_pdf(enhanced_rgb, output_pdf)

# 示例调用
if __name__ == '__main__':
    process_png_for_print("test_png.png",
                          output_tiff="final_for_print.tif",
                          output_pdf="final_for_print.pdf")
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值