devscast / tinify
适用于Tinify API的PHP客户端。Tinify智能压缩您的图片。更多详情请访问 https://tinify.com。
Requires
- php: >=8.0
- symfony/http-client: ^6.0|^7.0
Requires (Dev)
- phpstan/phpstan: ^1.4
- squizlabs/php_codesniffer: ^3.6
- symfony/var-dumper: ^6.0|^7.0
This package is auto-updated.
Last update: 2024-09-05 14:09:29 UTC
README
Tinify API允许您压缩和优化WebP、JPEG和PNG图像。它被设计为REST服务。各种语言的客户端库使其与Tinify API交互变得非常容易。
安装
您可以通过安装Composer包并将其添加到应用程序的依赖项中来使用PHP客户端。
composer require devscast/tinify
身份验证
要使用API,您必须提供API密钥。您可以通过注册您的姓名和电子邮件地址来获取API密钥。请始终保管好您的API密钥!
use Devscast\Tinify\Client; $tinify = new Client('yourtinifytoken');
所有请求将通过加密的HTTPS连接进行。
您可以指示API客户端通过HTTP代理进行所有请求。设置您的代理服务器URL,该URL可以包含可选的凭据。
use Devscast\Tinify\Client; $tinify = new Client( token: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', proxy: 'http://user:pass@192.168.0.1:8080' );
压缩图像
您可以将任何WebP、JPEG或PNG图像上传到Tinify API进行压缩。我们将自动检测图像类型,并根据TinyPNG或TinyJPG引擎进行优化。压缩将在您上传文件或提供图像URL时立即开始。您可以选择本地文件作为源,并将其写入另一个文件。
<?php use Devscast\Tinify\Client; $tinify = new Client(token: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx'); $tinify->toFile( source: $tinify->fromFile('/home/tinify/pictures/test.png'), path: '/home/tinify/pictures/test-compressed.png' );
您还可以从缓冲区(二进制字符串)上传图像,并获取压缩后的图像数据。
<?php $sourceBuffer = file_get_contents("unoptimized.jpg"); $compressedBuffer = $tinify->toBuffer(source: $tinify->fromBuffer($data));
您也可以提供图像的URL,而不是上传它。
<?php $tinify->toFile( source: $tinify->fromUrl('https://tinypng.com/images/panda-happy.png'), path: '/home/tinify/pictures/test-compressed.png' );
调整图像大小
使用API创建上传图像的调整大小版本。通过让API处理调整大小,您可以避免自己编写此类代码,并且您只需上传一次图像。调整大小的图像将进行优化压缩,并且外观清晰。
您还可以利用智能裁剪来创建关注图像中视觉重要区域的缩略图。
调整大小算作额外的压缩。例如,如果您上传单个图像并检索优化版本加上2个调整大小版本,这总共将算作3次压缩。
$tinify->toFile( source: $tinify->resize( source: $tinify->fromFile('/home/bernard-ng/Pictures/test.png'), method: 'fit', width: 500, height: 500 ), path: '/home/bernard-ng/tinify/test-compressed-resized.png' );
方法描述了图像调整大小的方式。以下方法可用:
-
scale : 按比例缩小图像。您必须提供目标宽度或目标高度,但不能同时提供两者。调整大小的图像将正好具有提供的宽度或高度
-
fit : 按比例缩小图像,使其适合给定的尺寸。您必须提供宽度和高度。调整大小的图像不会超过这两个尺寸。
-
cover : 按比例缩小图像,并在必要时进行裁剪,以便结果正好具有给定的尺寸。您必须提供宽度和高度。裁剪掉哪些图像部分将自动确定。一个智能算法将确定图像中最重要的区域。
-
thumb : 比 cover 更高级的实现,也可以检测具有纯背景的裁剪图像。图像将缩小到您提供的宽度和高度。如果检测到具有独立对象的图像,它将在必要时添加更多背景空间或裁剪不重要的部分。
如果目标尺寸大于原始尺寸,则不会进行缩放。防止缩放是为了保护图像质量。
保留元数据
您可以将上传的图像的特定元数据复制到压缩版本中。目前支持保留版权信息、GPS位置和创建日期。保留元数据会增加压缩文件的大小,因此您只需保留重要信息。
保留元数据不会算作额外的压缩。然而,在后台,会再次创建图像以添加额外的元数据。
$tinify->toFile( source: $tinify->preserve( source: $tinify->fromFile('/home/bernard-ng/Pictures/test.png'), metadata: ['creation', 'copyright'] ), path: '/home/bernard-ng/dev/projects/tinify-php/data/test-compressed.png' );
您可以选择以下选项以保留特定元数据。如果上传的图像中不存在请求的元数据,则不会添加任何元数据。
-
版权:保留任何版权信息。这包括JPEG的EXIF版权标记、PNG的XMP权利标记,以及Photoshop的版权标志或URL。占用多达90个额外的字节,加上版权数据的长度。
-
创建:保留任何创建日期或时间。这是图像或照片最初创建的时刻。这包括JPEG的EXIF原始日期时间标记或PNG的XMP创建时间。占用大约70个额外的字节。
-
位置(仅限JPEG):保留任何描述图像或照片拍摄位置的GPS位置数据。这包括JPEG的EXIF GPS纬度和GPS经度标记。占用大约130个额外的字节。
保存到Amazon S3
您可以告诉Tinify API直接将压缩图像保存到Amazon S3。如果您使用S3托管您的图像,这将节省您下载图像到服务器并自己上传到S3的麻烦。
$source = $tinify->toCloud( source: $tinify->fromFile('/home/tinify/pictures/test.png'), bucket_path: 'tinify/images/test.png', storage: new Aws( region: 'ap-south-1', secret_access_key: 'xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx', access_key_id: 'xxxxxxxxxxxxxxx', option: ['headers' => ['Cache-Control' => 'max-age=31536000, public']] // optional ) );
为了在Amazon S3上保存图像,您需要提供以下选项
-
aws_access_key_id
-
aws_secret_access_key:您的AWS访问密钥ID和秘密访问密钥。这些是Amazon AWS用户账户的凭证。您可以在Amazon的文档中找到如何获取它们的方法。用户必须具有正确的权限,详情见下文。
-
region:您的S3存储桶所在的AWS区域。
-
path:您想要存储图像的路径,包括存储桶名称。路径必须按照以下格式提供:
<bucket>/<path>/<filename>。 -
headers(实验性):您可以为存储的图像添加Cache-Control头部来控制浏览器缓存,例如:public, max-age=31536000。完整的指令列表可以在MDN网络文档中找到。
与您的AWS访问密钥ID对应的用户必须在您打算创建的对象的路径上具有PutObject和PutObjectAcl权限。
保存到Google Cloud Storage
您可以告诉Tinify API直接将压缩图像保存到Google Cloud Storage。如果您使用GCS托管您的图像,这将节省您下载图像到服务器并自己上传到GCS的麻烦。
在您可以将图像存储在GCS之前,您需要使用服务帐户生成访问令牌。
$tinify->toCloud( source: $tinify->fromFile('/home/bernard-ng/Pictures/test.png'), bucket_path: 'tinify/images/test.png', storage: new Gcs( access_token: 'XXXXXXXXXXXXXXXXXXXXXXXXX', option: ['headers' => ['Cache-Control' => 'max-age=31536000, public']] // optional ) );
为了在Google Cloud Storage上保存图像,您需要提供以下选项
-
gcp_access_token:用于验证Google云平台的访问令牌。您可以根据上面的示例了解如何生成这些令牌。
-
path:您想要存储图像的路径,包括存储桶名称。路径必须按照以下格式提供:
<bucket>/<path>/<filename>。 -
headers(实验性):您可以为存储的图像添加Cache-Control头部来控制浏览器缓存,例如:public, max-age=31536000。完整的指令列表可以在MDN网络文档中找到。
压缩计数
API客户端会自动跟踪您本月的压缩次数。您可以在验证API密钥后或至少进行一次压缩请求后获取压缩计数。
<?php $source = $tinify->fromUrl('https://tinypng.com/images/panda-happy.png'); $source->getCompressionCount(); $tinify->toFile($source, path: '/home/tinify/pictures/test-compressed.png');
承认
此包是tinify/tinify-php库的重新实现,支持PHP 8,使用设计去除静态调用以实现更面向对象的策略