devscast/tinify

适用于Tinify API的PHP客户端。Tinify智能压缩您的图片。更多详情请访问 https://tinify.com。

2.1.0 2023-12-20 12:57 UTC

This package is auto-updated.

Last update: 2024-09-05 14:09:29 UTC


README

Latest Stable Version Total Downloads License

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对应的用户必须在您打算创建的对象的路径上具有PutObjectPutObjectAcl权限。

保存到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,使用设计去除静态调用以实现更面向对象的策略