CodeIgniter Image Lib 图像处理类使用指南

半杯拿铁
半杯拿铁
发布时间:2026-10-15 | 4人浏览过
原创

深入解析 CodeIgniter 框架中的 image_lib 图像处理类,详细讲解如何配置 GD2 库来实现图像的缩放、裁剪、旋转以及添加文字或叠加层水印。通过具体的 Controller 示例和参数说明,帮助开发者快速上手并解决常见的图像处理需求。

1. 类结构与初始化准备

在 CodeIgniter 中使用图像处理功能,首先需要加载 image_lib 库。以下是一个基础控制器类的结构示例,它演示了如何在构造函数中加载库,并预留了不同图像处理功能的函数入口。

<?php
class Image extends CI_Controller { // 建议继承 CI_Controller
    public function __construct()
    {
        parent::__construct();
        $this->load->library('image_lib');
    }

    public function index()
    {
        // 首页展示支持的图像处理类型
        echo '本控制器支持以下操作:' . "<br>"
           . '* 调整图像大小 (resize)' . "<br>"
           . '* 创建缩略图 (resize with thumb)' . "<br>"
           . '* 图像裁剪 (crop)' . "<br>"
           . '* 图像旋转 (rotate)' . "<br>"
           . '* 添加图像水印 (watermark)';
    }
}
?>

2. 调整图像尺寸与生成缩略图

调整图像大小是 Image Lib 最常用的功能之一。可以通过配置数组来指定源图像、目标尺寸、质量以及是否保留比例等关键参数。

第1步:配置 Resize 参数

在进行任何处理前,必须正确配置 $config 数组。以下参数对于 resize() 方法是核心:

  • image_library: 设置为 'gd2'(必须)。
  • source_image: 原始图像的路径(必须)。
  • width / height: 目标宽度和高度(必须)。
  • maintain_ratio: 设置为 TRUE 以自动调整另一维度以保持宽高比。
  • create_thumb: 设置为 TRUE 可生成缩略图,否则将覆盖或修改原图/新图文件。

第2步:执行 Resize 操作

调用 initialize() 传入配置后,执行 resize()。若成功返回 true,可通过 display_errors() 获取错误信息。

// resize() 方法示例
public function resize()
{
    $config['image_library'] = 'gd2';
    $config['source_image'] = '/path/to/image.jpg'; // 请替换为实际相对路径
    $config['new_image'] = '/path/to/new_image.jpg'; // 若不指定且 create_thumb=FALSE,则修改源文件
    $config['quality'] = '90%';
    $config['width'] = 575;
    $config['height'] = 350;
    $config['maintain_ratio'] = TRUE; // 维持原始纵横比
    
    // 如果 create_thumb 为 FALSE 且指定 new_image,则文件名由 new_image 决定
    // 如果 create_thumb 为 TRUE,默认文件名会在原文件名后添加 _thumb
    $config['create_thumb'] = TRUE;
    $config['thumb_marker'] = '_thumb';

    $this->image_lib->initialize($config);

    if (!$this->image_lib->resize()) {
        echo $this->image_lib->display_errors();
    } else {
        echo "Resize successful.";
    }
}

3. 图像精确裁剪

如果需要从图像中截取特定区域,可以使用裁剪功能。裁剪需要明确指定起始坐标 (x_axis, y_axis) 和目标尺寸。

第1步:配置 Crop 参数

  • x_axis / y_axis: 裁剪区域的左上角坐标(像素值,必须)。
  • width / height: 裁剪后的最终尺寸(必须)。
  • maintain_ratio: 裁剪时通常设为 FALSE,除非希望按比例缩放后再次裁剪。

第2步:执行 Crop 操作

注意:裁剪会直接改变图像内容,建议在测试时使用新的输出路径以防误删原图数据。

// crop() 方法示例
public function crop()
{
    $config['image_library'] = 'gd2';
    $config['source_image'] = '/path/to/source.jpg';
    $config['new_image'] = '/path/to/cropped_result.jpg';
    $config['width'] = 75;
    $config['height'] = 50;
    $config['x_axis'] = '30'; // 从左边缘开始的像素偏移
    $config['y_axis'] = '40'; // 从上边缘开始的像素偏移
    $config['maintain_ratio'] = TRUE; // 根据具体需求调整,通常为FALSE以精确匹配尺寸

    $this->image_lib->initialize($config);

    if (!$this->image_lib->crop()) {
        echo $this->image_lib->display_errors();
    } else {
        echo "Crop successful.";
    }
}

4. 图像旋转与翻转

CodeIgniter 支持几种预设的旋转角度和翻转模式,通过 rotation_angle 参数控制。

第1步:配置 Rotate 参数

可用的 rotation_angle 值包括:

  • 90, 180, 270: 逆时针旋转相应角度。
  • vrt: 竖向翻转 (Vertical Mirror)。
  • hor: 横向翻转 (Horizontal Mirror)。
// rotate() 方法示例
public function rotate()
{
    $config['image_library'] = 'gd2';
    $config['source_image'] = '/path/to/source.jpg';
    $config['new_image'] = '/path/to/rotated.jpg';
    $config['rotation_angle'] = 'vrt'; // 可选: 90, 180, 270, vrt, hor

    $this->image_lib->initialize($config);

    if (!$this->image_lib->rotate()) {
        echo $this->image_lib->display_errors();
    } else {
        echo "Rotate successful.";
    }
}

5. 添加水印

水印功能分为两种类型:text(文字水印)和 overlay(图像水印)。两者共享部分位置参数,但各自有特定的配置项。

第1步:通用水印配置

  • wm_type: 设置为 'text' 或 'overlay'。
  • wm_vrt_alignment / wm_hor_alignment: 水印在垂直和水平方向的对齐方式(top/bottom/middle 和 left/right/center)。
  • wm_vrt_offset / wm_hor_offset: 在对齐基础上额外的像素偏移。
  • wm_padding: 水印与图像边缘的最小间距(像素)。

第2步:文字水印特有配置

  • wm_text: 显示的水印文字内容。
  • wm_font_path: TTF 字体文件的绝对路径(必须存在,否则报错)。
  • wm_font_size: 字体大小。
  • wm_font_color: 十六进制颜色代码(如 FFFFFF)。
  • wm_shadow_color: 阴影颜色。
  • wm_shadow_distance: 阴影模糊距离。

第3步:图像水印特有配置

  • wm_overlay_path: 作为水印的图片路径(必须是 PNG/GIF)。
  • wm_opacity: 透明度(0-100)。
  • wm_x_transp / wm_y_transp: 透明色通道阈值(用于移除水印背景)。

第4步:执行 Watermark

以下是文字水印的实现示例:

// watermark_text() 方法示例
public function watermark_text()
{
    $config['image_library'] = 'gd2';
    $config['source_image'] = '/path/to/image.jpg';
    $config['wm_type'] = 'text'; // 使用文字水印
    $config['wm_text'] = 'Copyright 2023 - Your Site';
    $config['wm_font_path'] = '/path/to/fonts/myfont.ttf'; // 确保路径正确且文件存在
    $config['wm_font_size'] = '16';
    $config['wm_font_color'] = 'ffffff';
    $config['wm_vrt_alignment'] = 'bottom';
    $config['wm_hor_alignment'] = 'right';
    $config['wm_padding'] = '20';

    $this->image_lib->initialize($config);
    $this->image_lib->watermark();
}

以下是图像叠加水印的实现示例:

// watermark_overlay() 方法示例
public function watermark_overlay()
{
    $config['image_library'] = 'gd2';
    $config['source_image'] = '/path/to/image.jpg';
    $config['wm_type'] = 'overlay'; // 使用图像水印
    $config['wm_overlay_path'] = '/path/to/logo.png';
    $config['wm_opacity'] = '50';
    $config['wm_vrt_alignment'] = 'middle';
    $config['wm_hor_alignment'] = 'center';

    $this->image_lib->initialize($config);
    $this->image_lib->watermark();
}

以上就是 CodeIgniter image_lib 图像处理类设置与使用的详细内容,更多关于 CodeIgniter 框架开发技巧的资料请关注本站其它相关文章!

相关标签:

本站声明

本文内容仅供参考,不代表本站观点。转载或引用请注明出处。如发现内容问题,请通过联系我们页面反馈。

Python 相关产品和应用

全部下载

专题列表