mos/cimage

处理、缩放、调整大小、裁剪和过滤图像。

v0.8.6 2023-10-27 08:20 UTC

README

Join the chat at https://gitter.im/mosbth/cimage

关于

CImage是一个PHP类,它通过缩放、裁剪和过滤效果使图像调整大小,使用PHP GD。脚本img.php使用CImage来允许服务器端图像处理,利用缓存和优化处理后的图像。

服务器端图像处理是任何网页开发者非常有用的工具,img.php有一个易于使用的界面,并且当您将其与网站集成时非常强大。使用它可能会减少管理图像的时间和精力,并可能提高您创建网站内容的流程。

本软件是免费和开源的,许可协议为MIT。

文档

在以下位置阅读完整文档http://dbwebb.se/opensource/cimage

新网站正在设置中cimage.se,以改进文档(工作正在进行中)。

要求

CImageimg.php支持GIF(带有透明度)、JPEG和PNG(8位透明,24位半透明)图像。它需要PHP 5.3和PHP GD。您可以选择安装EXIF扩展以支持JPEG图像的自动旋转。

版本v0.7.x将是支持PHP 5.3的最后一个版本。下一个版本将需要更新的PHP版本。

安装

有几种安装方法。您可以选择安装整个项目,该项目使用自动加载器包含各种文件,或者您可以选择安装包含所有代码的完整捆绑包。

从GitHub安装源代码

源代码可在GitHub上获取。克隆、分叉或下载zip文件

最新稳定版本是v0.7.18,发布于2016-08-09。

我更喜欢这样克隆。请切换到最新稳定版本。

git clone git://github.com/mosbth/cimage.git
cd cimage
git checkout v0.7.18

使缓存目录可由Web服务器写入。

chmod 777 cache

安装完整捆绑包

有一些包含img.php的完整捆绑包可以下载和使用,而无需依赖其余源代码。

下载您选择的版本如下。

wget https://raw.githubusercontent.com/mosbth/cimage/v0.7.18/webroot/imgp.php

在您的编辑器中打开文件,并编辑数组$config。确保图像目录和缓存目录的路径与您的环境匹配,或者为脚本创建一个自己的配置文件。

从Packagist安装

您可以使用composer安装来自Packagist的包mos/cimage

用例

让我们通过一些用例让您了解在什么情况下以及如何使用img.php可能很有用。

制作缩略图

假设您有一个较大的图像,您想将其制作成80x80像素大小的缩略图。您只需将图像添加到widthheight的约束中,并使用crop-to-fit调整大小策略来裁剪掉不适合的部分。

要生成这样的缩略图,创建一个如下所示的链接

img.php?src=kodim04.png&width=80&height=80&crop-to-fit

稍微复杂一些的用例

也许您从朋友那里收到了一张图片。这张图片是用iPhone拍摄的,因此已经旋转了。

原始图像看起来像这样,已缩小至宽度为250像素。

因此,您需要旋转并裁剪一些部分以使其更有趣。

为了展示效果,我将根据图像的EXIF信息自动旋转图像,将其裁剪成100x100像素的缩略图,并添加滤镜使其变为灰度,最后添加锐化效果。仅为了展示,我将图像旋转25度——请不要问我为什么。

让我们称之为“URL-Photoshopper”。这就是魔法的样子。

img.php?src=issue36/me-270.jpg&w=100&h=100&cf&aro &rb=-25&a=8,30,30,38&f=grayscale&convolve=sharpen-alt

对我来说,我使用img.php在我的网站上上传所有图像,它让我有能力影响生成的图像——而无需打开照片编辑应用程序。

快速开始

查看测试页面

通过将浏览器指向测试文件webroot/test/test.php来尝试它。它将显示一些示例图像,您可以查看它们的创建方式。

处理您的第一张图像

通过在浏览器中打开图像来尝试它。从

webroot/img.php?src=kodim04.png

开始,并尝试通过添加以下选项将其调整为缩略图

&width=100&height=100&crop-to-fit

“处理图像”涉及哪些内容?

&verbose添加到链接中,以获取关于图像处理过程中发生情况的详细输出。这对于开发人员和那些寻求深入了解其工作原理的人来说很有用。

检查您的系统

如果您不确定您的系统已加载正确的扩展,请打开webroot/check_system.php

它是如何工作的?

请查看webroot/img_config.php中的设置,并查看如何使用CImagewebroot/img.php

程序流程,只是为了让您了解环境。

  1. img.php开始。
  2. img.phpimg_config.php(如果配置文件可用)中读取配置详细信息。
  3. img.php读取并处理传入的$_GET参数,以准备使用CImage
  4. img.php使用CImage
  5. CImage根据其使用方式处理、缓存和输出图像。

继续阅读,了解如何使用img.php

基本用法

选择源

通过使用其src属性通过img.php打开图像。

img.php?src=kodim13.png

它看起来像这样。

所有图像都存储在目录结构中,您可以通过以下方式访问它们

?src=dir1/dir2/image.png

使用宽度和高度约束来调整大小

通过应用宽度和高度约束或其中之一来创建图像的缩略图。

通过设置widthheight或两者,图像将调整大小以不超过定义的尺寸,并保持其原始宽高比。

将约束视为一个图像应适合的虚拟框。对于width=150height=150,该框的尺寸为150x150px。风景图像将适合该框,其宽度为150px,其高度取决于宽高比,但肯定小于150px。肖像图像将适合高度为150px,其宽度取决于宽高比,但肯定小于150px。

调整大小以适应特定维度

创建具有特定宽度和高度的缩略图通常涉及拉伸或裁剪图像以适应所选尺寸。以下是如何创建具有300x150像素精确尺寸的图像的方法,通过拉伸裁剪填充以适应

学习如何裁剪您的图像,创意裁剪可以从看似无用的原始图像中创造出美好的图像。

拉伸可能有效,就像上面的例子,你几乎看不出图像被拉伸了。但通常,拉伸不是一个很好的选择,因为它会扭曲比例。拉伸面部可能不会特别理想。

填充适配在需要图像适配特定尺寸时很有用,拉伸和裁剪都无法做到。仔细选择背景颜色,以制作出良好的最终图像。选择与您网站相同的背景颜色,这样就没有人会注意到。

参数列表

img.php支持很多参数。组合参数以获得所需的行为和最终图像。例如,使用宽度、宽高比和裁剪适配对原始图像进行调整大小,应用锐化效果,以质量30将图像保存为JPEG。

img.php?src=kodim13.png&w=600&aspect-ratio=4 &crop-to-fit&sharpen&save-as=jpg&q=30

<img src=https://cimage.se/cimage/imgd.php?src=example/kodim13.png&w=600&aspect-ratio=4&crop-to-fit&sharpen&save-as=jpg&q=30 alt=''>

以下是所有可以与img.php一起使用的参数列表,按照其基本使用目的分组。

必选选项和调试

选项src是唯一的必选选项。本节中的选项对于调试或决定使用目标图像的哪个版本很有用。

决定目标图像宽度和高度的选项

这些选项都会影响最终图像的宽度和高度。

调整策略选项

这些选项影响将图像调整为目标图像的策略,该目标图像同时设置了宽度和高度。

裁剪图像部分的选项

这些选项允许决定裁剪图像的哪一部分。

通用处理选项

这些选项是影响处理的通用选项。

调整大小前的图像处理

这些选项在图像调整大小之前执行。

调整大小后的图像处理

这些选项在图像调整大小之后执行。

保存图像,影响质量和文件大小

保存目标图像的选项。

继续阅读,查看如何使用和组合参数以实现所需效果和目标图像的示例。

_config.php中的配置设置

有一些配置设置可以用来改变img.php的行为。以下是一个概述,按默认配置文件中的顺序列出。

查阅文件webroot/img-config.php以获取完整列表以及每个配置设置的默认值。有一个附录,其中可以看到默认配置文件。

创建并命名配置文件

文件img.php会寻找配置文件img_config.php,如果找到,则使用它。包含所有内容的三个文件--imgd.phpimgp.phpimgs.php--包含一个空的$config数组,可以通过在相同目录中保存配置文件来覆盖它。如果脚本为imgp.php,则将配置文件命名为imgp_config.php,它将找到并使用这些设置。

调试图像处理

通过添加v, verbose参数,您可以可视化图像处理过程中发生的事情。它将显示最终图像,并显示实际发生的情况的详细输出。

这对于调试和理解实际发生了什么非常有用。

参数nc, no-cache忽略缓存项,并将始终创建新的缓存项。

参数so, skip-original跳过原始图像,即使它是最佳匹配。结果创建并显示缓存图像。

图像的JSON表示

您可以通过添加选项json来获取图像的JSON表示形式。如果您需要了解图像的实际尺寸,这可能会很有用。

例如,以下图像是这样创建的:

&w=300&save-as=jpg

其JSON表示形式是通过以下方式检索的:

&w=300&save-as=jpg&json

它给出了以下结果。

{  
    "src":"kodim24.png",
    "srcGmdate":"Wed, 12 Feb 2014 13:46:19",
    "cache":"_._kodim24_300_200_q60.jpg",
    "cacheGmdate":"Sat, 06 Dec 2014 14:09:50",
    "filename":"_._kodim24_300_200_q60.jpg",
    "width":300,
    "height":200,
    "aspectRatio":1.5,
    "size":11008,
    "colors":25751
}

我将使用此功能来简化img.phpCImage的测试。但此功能当真正需要完全控制图像的最终尺寸时也非常有用。

影响和考虑因素

以下是在实时系统上应用img.php时的几点思考。

选择合适的模式

img.php选择合适的模式。将其设置为“严格”或“生产”以防止外界获取有关您的系统的信息。仅使用“开发”用于内部使用,因为其错误报告相当冗长。

将安装目录放置在web根目录之外

编辑配置文件以将安装目录(以及缓存目录)放置在web根目录之外。最佳实践是在web根目录之外存储安装目录和缓存。web根目录中只需要img.php(以及如果使用则还有img_config.php)即可,例如,可以放置在/img/img.php或直接作为/img.php

通过.htaccess使用友好URL

使用.htaccess和重写规则(Apache)来获取友好的图像URL。将img.php放在/img目录中。将.htaccess文件放在web根目录中。

img.php.htaccess

#
# Rewrite to have friendly urls to img.php, edit it to suite your environment.
#
# The example is set up as following.
#
#  img                 A directory where all images are stored
#  img/me.jpg          Access a image as usually.
#  img/img.php         This is where I choose to place img.php (and img_config.php).
#  image/me.jpg        Access a image though img.php using htaccess rewrite.
#  image/me.jpg?w=300  Using options to img.php.
# 
# Subdirectories also work.
#  img/me/me.jpg          Direct access to the image.
#  image/me/me.jpg        Accessed through img.php.
#  image/me/me.jpg?w=300  Using options to img.php.
#
RewriteRule ^image/(.*)$        img/img.php?src=$1 [QSA,NC,L]

现在您可以通过/image/car.jpg(使用img.php)或像通常一样通过/img/car.jpg来访问所有图像,而不需要通过img.php。您按常规发送参数。

/image/car.jpg?w=300&sharpen

或位于子目录中的图像。

/image/all-cars/car.jpg?w=300&sharpen

结果是易于阅读的图像URL。对搜索引擎来说很容易跟踪,您可以使用/img中现有的目录结构。就像希望的那样。

监控缓存大小

包含用于监控缓存目录大小的实用程序cache.bash。它生成如下输出。

$ ./cache.bash
Usage: ./cache.bash [cache-dir]   

$ ./cache.bash cache                         
Total size:       27M                                            
Number of files:  225                                            
                                                                 
Top-5 largest files:                                             
1032    cache/_._kodim08_768_512_q60convolvesharpen.png          
960     cache/_._kodim08_768_512_q60convolveemboss.png           
932     cache/_._kodim08_768_512_q60_rb45.png                    
932     cache/_._kodim08_768_512_q60_ra45.png                    
856     cache/_._kodim08_768_512_q60_rb90.png                    
                                                                 
Last-5 created files:                                            
2014-11-26 16:51 cache/_._kodim08_768_512_q60convolvelighten.png 
2014-11-26 16:51 cache/_._kodim08_768_512_q60convolveblur.png    
2014-11-26 16:48 cache/_._kodim08_400_267_q60convolvesharpen.png 
2014-11-26 16:48 cache/_._kodim08_400_267_q60convolvelighten.png 
2014-11-26 16:48 cache/_._kodim08_400_267_q60convolveemboss.png  
                                                                 
Last-5 accessed files:                                           
2014-11-27 16:12 _._wider_900_581_q60.jpg                        
2014-11-27 16:12 _._wider_750_484_q60.jpg                        
2014-11-27 16:12 _._wider_640_413_q60.jpg                        
2014-11-27 16:12 _._wider_640_200_c640-200-0-100_q60.jpg         
2014-11-27 16:12 _._wider_600_387_q60.jpg                        

如果您觉得需要监控缓存目录的大小,请以此为基础。

只读缓存

缓存目录需要可写,以便img.php创建新文件。但可以在首先创建所有缓存文件后,将目录设置为只读。这将为您提供一种关闭img.php创建新缓存文件的方法。img.php将继续为所有具有缓存版本的图像工作,但如果有人尝试创建一个新版本(之前未缓存的版本)的图像,则会失败。

使用外部工具进行后处理

您可以使用外部工具对图像进行后处理以优化文件大小。此选项适用于JPEG和PNG图像。默认情况下禁用后处理,编辑img_config.php以启用它。

进行后处理需要额外的时间,可能需要几秒钟。这是创建缓存图像的处理,之后将使用缓存版本,不再需要执行后处理。

这些后处理工具不是CImageimg.php的一部分,您需要单独下载和安装它们。我在自己的系统上使用它们以获取最佳文件大小。

允许远程下载图像

您可以让 img.php 下载远程图片。这可以在配置文件中启用。然而,在这样做之前,请考虑允许任何人将文件(希望是图片)下载到您的服务器,然后通过网页服务器访问它的含义。

这听起来很可怕。它应该如此。

出于我个人的考虑,我将这样使用它,因为我认为这是一个非常有用的功能。

  • 创建一个允许远程下载的特殊版本 img.php,并隐藏它以供公共使用。
  • 始终使用密码。
  • 下载并处理图片,并将其保存为一个 别名
  • 将图片集成到您的网页中,并使用别名目录中的图片。

这是一种快速下载远程图片、处理和分享图片的简单方法。

因此,这是一个可怕的功能,我可能后悔将其放入。尽管如此,它默认是禁用的,您需要承担启用它的风险。我已经尽力使其尽可能安全,但我可能有所遗漏。我将在自己的系统上运行它,所以我想我会发现它的安全性如何。

社区

有一个瑞典论坛,您可以在那里提问,甚至可以用英语提问。该论坛是一个关于网页开发教育的通用论坛,并非专门针对此软件。

CImageimg.phpPHP 子论坛 中提问。

或者通过创建一个问题在 GitHub 上提问——那将是提问的最佳位置。

或者如果您喜欢 irc。

  • irc://irc.bsnet.se/#db-o-webb
  • irc://irc.freenode.net/#dbwebb

问题和功能请求

使用 GitHub 报告问题。请始终包含以下内容。

  1. 简要描述:您试图实现什么,发生了什么,您期望什么。
  2. 用于 img.php 的参数列表。
  3. 使用的图片。

如果您请求一个功能,请描述其用法和为什么您认为它适合 CImageimg.php

请随意分叉、克隆并创建拉取请求。

 .
..:  Copyright 2012-2015 by Mikael Roos ([email protected])