API Reference

Tinify API让您可以压缩和优化JEPG和PNG图片。 它被设计成一个REST服务。这个页面描述了原始HTTP API。 同时我们也维护了多种语言的客户端程序库,使得使用Tinify API变得非常简单。

API托管在api.tinify.com

认证

您必须提供您的API密钥来使用API。您可以通过注册您的姓名和Email地址来获取API密钥。 请秘密保存API密钥。

API的认证由HTTP基本认证实现。 所有请求都要有一个Authorization请求头,这个请求头包含一个Base64编码的api:YOUR_API_KEY字符串,YOUR_API_KEY就是API密钥, 您可以在API账号页面找到。

所有请求必须使用加密的HTTPS连接。

压缩图片

您可以上传任何JPEG或PNG图片到Tinify API来进行压缩。我们将自动检测图片类型并相应的使用TinyPNG或TinyJPG引擎进行优化。 只要上传文件或提供图片URL,就会开始压缩。

从文件上传示例

您可以上传本地文件。POST请求的数据体是图片的二进制内容。

POST /shrink HTTP/1.1
Host: api.tinify.com
Authorization: Basic YXBpOmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1

[binary]
HTTP/1.1 201 Created
Compression-Count: 1
Location: https://api.tinify.com/output/2xnsp7jn34e5.jpg
Content-Type: application/json

{
  "input": {
    "size": 207565,
    "type": "image/jpeg"
  }
}

例如,如果您在当前目录中有一个以unoptimized.jpg命名的文件:

curl https://api.tinify.com/shrink \
     --user api:YOUR_API_KEY \
     --data-binary @unoptimized.jpg \
     --dump-header /dev/stdout

从URL上传示例

您还可以提供图片的网址,而不必上传图片。API接收JSON数据体,其中source字段的值是图片的URL。

POST /shrink HTTP/1.1
Host: api.tinify.com
Authorization: Basic YXBpOmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1
Content-Type: application/json

{
  "source": {
    "url": "https://tinypng.com/images/panda-happy.png"
  }
}
HTTP/1.1 201 Created
Compression-Count: 1
Location: https://api.tinify.com/output/cciutldm823k9e9r.png
Content-Type: application/json

{
  "output": {
    "size": 30734,
    "type": "image/png"
  }
}

例如,如果您的数据源为https://tinypng.com/images/panda-happy.png

curl https://api.tinify.com/shrink \
     --user api:YOUR_API_KEY \
     --header "Content-Type: application/json" \
     --data '{"source": {"url": "https://tinypng.com/images/panda-happy.png"} }' \
     --dump-header /dev/stdout

下载请求示例

压缩后的图片可以从上一步的Location响应头内的URL处下载。

GET /output/2xnsp7jn34e5.jpg HTTP/1.1
Host: api.tinify.com
Authorization: Basic YXBpOmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1
HTTP/1.1 200 OK
Compression-Count: 1
Image-Width: 530
Image-Height: 300
Content-Type: image/jpeg
Content-Length: 46480

[binary]

例如,您可以将图片保存为optimized.jpg文件并打开:

curl https://api.tinify.com/output/2xnsp7jn34e5.jpg \
     --user api:YOUR_API_KEY \
     --output optimized.jpg
open optimized.jpg

调整图片大小

使用API​​创建已上传图像的缩放版本。通过API实现缩放,您可以避免自己编写相关代码,图片只需要上传一次。 缩放后的图片会自动被优化,压缩并且看起来清晰细腻。

您还可以利用智能剪裁功能来创建专注图像中最重要的视觉区域的缩略图。

缩放会计为一次额外的压缩。例如,如果您上传单张图片并且获取优化版本以及两个缩放版本,这将总共被计为3次压缩。

缩放请求示例

您可以使用压缩后的Location响应头中的URL来缩放图片。 同时提交JSON请求体和Content-Type: application/json请求头。

POST /output/2xnsp7jn34e5.jpg HTTP/1.1
Host: api.tinify.com
Authorization: Basic YXBpOmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1
Content-Type: application/json

{
  "resize": {
    "method": "fit",
    "width": 150,
    "height": 100
  }
}
HTTP/1.1 200 OK
Compression-Count: 2
Content-Type: image/jpeg
Image-Width: 150
Image-Height: 85
Content-Length: 12594

[binary]

例如,要将压缩及缩放后的图片以thumbnail.jpg命名的文件储存:

curl https://api.tinify.com/output/2xnsp7jn34e5.jpg \
     --user api:YOUR_API_KEY \
     --header "Content-Type: application/json" \
     --data '{ "resize": { "method": "fit", "width": 150, "height": 100 } }' \
     --dump-header /dev/stdout --silent \
     --output thumbnail.jpg

请求选项

method字段提供图片被缩放的方式。下面是可用的方法:

Scale
scale
按比例缩小图片。您必须提供目标widthheight,不能同时提供两者。缩小后的图片会有确定的宽度或者高度。
Fit
fit
按比例缩小图片,使其适合(fit)给定的尺寸。你必须同时提供widthheight。缩小后的图像不会超过这些尺寸中的任何一个。
Cover
cover
按比例缩小图片,如有必要裁切图片。结果具有准确的给定尺寸。 图片中哪个部分将被裁切是自动决定的。智能算法确定图像中最重要的区域。
Thumb
thumb
一个更先进的缩略图实现,还能检测具有简单背景的裁切图片。图片会被缩小到您提供的widthheight的大小。 如果一个图片被检测到独立物体,算法将在必要位置添加更多的背景,或者裁切掉不重要的部分。 这是个新功能,我们期待您的反馈

如果目标尺寸比原始尺寸更大,图片将不会被放大。为了保证图片质量,会避免放大图片。

保留元数据

您可以指定从上传图片拷贝到压缩版本的元数据。当前支持保留版权信息,GPS位置创建日期。 保留元数据会增加压缩文件的大小,因此您应该只保留重要的元数据。

保留元数据不会算作额外的压缩次数。但是在后台,图像将随着额外的元数据再次创建。

上传请求示例

您需要先上传原始图像,类似于前面的示例。

POST /shrink HTTP/1.1
Host: api.tinify.com
Authorization: Basic YXBpOmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1

[binary]
HTTP/1.1 201 Created
Compression-Count: 1
Location: https://api.tinify.com/output/2xnsp7jn34e5.jpg
Content-Type: application/json

{
  "output": {
    "size": 45974,
    "type": "image/jpeg"
  }
}

例如,如果您在当前目录有以unoptimized.jpg命名的文件:

curl https://api.tinify.com/shrink \
     --user api:YOUR_API_KEY \
     --data-binary @unoptimized.jpg \
     --dump-header /dev/stdout

带元数据的下载请求示例

您现在可以下载包含版权信息和创建日期的压缩图片。指定上一步返回的Location响应头中的URL, 并将版权信息和创建日期的JSON指令添加到preserve字段。

POST /output/2xnsp7jn34e5.jpg HTTP/1.1
Host: api.tinify.com
Authorization: Basic YXBpOmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1
Content-Type: application/json

{
  "preserve": ["copyright", "creation"]
}
HTTP/1.1 200 OK
Compression-Count: 1
Content-Type: image/jpeg
Image-Width: 530
Image-Height: 300
Content-Length: 46480

[binary]

注意,Content-Length将会略大于第一步的输出中的size

下面的例子展示了如果将保留了版权元数据的压缩图片保存为名为optimized-copyright.jpg的文件。

curl https://api.tinify.com/output/2xnsp7jn34e5.jpg \
     --user api:YOUR_API_KEY \
     --header "Content-Type: application/json" \
     --data '{ "preserve": ["copyright", "creation"] }' \
     --dump-header /dev/stdout \
     --output optimized-copyright.jpg

请求选项

您可以提供以下选项来保留特定的元数据。如果上传图片没有包含请求的元数据,那么将不会写入新数据。

copyright
保留所有版权信息。包括EXIF版权标记(JPEG),XMP权限标记(PNG)以及Photoshop版权标记或URL。 使用最多90个字节,再加上版权数据的长度。
creation
保留任何创建日期或时间。这是最初创建图像或照片的时刻。包括EXIF原始日期时间标记(JPEG)或XMP创建时间(PNG)。使用大约70个额外字节。
location (JPEG only)
保留任何GPS位置信息,该信息描述图片或者照片创建的位置。包含EXIF GPS维度和GPS精度标签(JPEG)。使用大约130个额外字节。

储存到Amazon S3

您可以告诉Tinify API将压缩后的图片直接储存到Amazon S3。 如果您使用S3托管您的图片,这可以避免您将图像下载到服务器并自行将其上传到S3的麻烦。

S3请求示例

您可以使用Location响应头中返回的URL将压缩图像存储到S3。在储存文件到S3的请求中,需要带有指定储存空间信息的JSON数据体和Content-Type: application/json请求头。

POST output/2xnsp7jn34e5.jpg HTTP/1.1
Host: api.tinify.com
Authorization: Basic YXBpOmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1
Content-Type: application/json

{
  "store" : {
    "service": "s3",
    "aws_access_key_id": "AKIAIOSFODNN7EXAMPLE",
    "aws_secret_access_key": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
    "region": "us-west-1",
    "path": "example-bucket/my-images/optimized.jpg"
  }
}
HTTP/1.1 200 OK
Compression-Count: 3
Image-Width: 530
Image-Height: 300
Location: https://s3-us-west-1.amazonaws.com/example-bucket/my-images/optimized.jpg

例如,要将压缩图片储存到名为example-bucket的空间中,并命名为my-images/optimized.jpg

curl https://api.tinify.com/output/2xnsp7jn34e5.jpg \
     --user api:YOUR_API_KEY \
     --dump-header /dev/stdout --silent \
     --header "Content-Type: application/json" \
     --data '{
       "store" : {
         "service": "s3",
         "aws_access_key_id": "AKIAIOSFODNN7EXAMPLE",
         "aws_secret_access_key": "wJalrXUtnFEMI/K7MDENG/bPxRfiCYEXAMPLEKEY",
         "region": "us-west-1",
         "headers": {
           "Cache-Control": "public, max-age=31536000"
         },
         "path": "example-bucket/my-images/optimized.jpg"
       }
     }'

请求选项

要将图片储存到Amazon S3,您需要提供如下选项:

service
指定s3来储存到Amazon S3。
aws_access_key_id
aws_secret_access_key
您的AWS访问ID和访问密钥。这些是访问您Amazon AWS用户的凭据。从 文档 中可以找到获取它们的方法。用户必须有正确的权限,请参阅下面的详细信息。
region
指定您S3储存空间的AWS区域
path
要储存图片的路径,包含空间名称。路径必须按如下格式指定:<bucket>/<path>/<filename>

如下是可选配置:

headers (实验)
您可以添加Cache-Control请求头来控制储存图片的浏览器缓存,如同以下示例:public, max-age=31536000。 完整的指令列表可以从MDN web文档中找到。

访问ID和访问密钥关联的用户必须拥有要创建对象的路径的PutObjectPutObjectAcl权限。

S3访问策略示例

如果要专门为Tinify API创建访问受限的用户,您可以从以下示例 策略开始:

{
  "Statement": {
    "Effect": "Allow",
    "Action": [
      "s3:PutObject",
      "s3:PutObjectAcl"
    ],
    "Resource": [
      "arn:aws:s3:::example-bucket/*"
    ]
  }
}

保存到Google云存储

您可以告诉Tinify API将压缩后的图片直接储存到Google云存储。 如果您使用GCS来托管您的图片,这可以避免您将图像下载到服务器并自行将其上传到GCS的麻烦。

在GCS中存储图像之前,您需要使用一个服务帐户生成访问令牌。

生成GCP访问令牌

请在页面上选择一种语言,来查看如何生成访问令牌的示例。

GCS请求示例

您可以使用Location响应头中返回的URL来储存压缩图片到GCS。在储存文件到S3的请求中, 需要带有指定储存空间信息的JSON数据体和Content-Type: application/json请求头。

POST output/2xnsp7jn34e5.jpg HTTP/1.1
Host: api.tinify.com
Authorization: Basic YXBpOmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1
Content-Type: application/json

{
  "store" : {
    "service": "gcs",
    "gcp_access_token": "EXAMPLE_TOKEN_Ag_0HvsglgriGh5_dqDqjaoGU_EXAMPLE_TOKEN",
    "path": "example-bucket/my-images/optimized.jpg"
  }
}
HTTP/1.1 200 OK
Compression-Count: 3
Image-Width: 530
Image-Height: 300
Location: https://storage.googleapis.com/example-bucket/my-images/optimized.jpg

例如,要将压缩图片储存到名为example-bucket的空间中,并命名为my-images/optimized.jpg

curl https://api.tinify.com/output/2xnsp7jn34e5.jpg \
    --user api:YOUR_API_KEY \
    --dump-header /dev/stdout --silent \
    --header "Content-Type: application/json" \
    --data '{
      "store" : {
        "service": "gcs",
        "gcp_access_token": "EXAMPLE_TOKEN_Ag_0HvsglgriGU_EXAMPLE_TOKEN",
        "headers": {
          "Cache-Control": "public, max-age=31536000"
        },
        "path": "example-bucket/my-images/optimized.jpg"
      }
    }'

请求选项

要将图片储存到Google云存储,您需要提供如下选项:

service
指定gcs来储存到Google云存储。
gcp_access_token
向Google云平台认证的授权令牌。从上文查找生成授权令牌的示例。
path
要储存图片的路径,包含空间名称。路径必须按如下格式指定:<bucket>/<path>/<filename>

如下是可选配置:

headers (实验)
您可以添加Cache-Control请求头来控制储存图片的浏览器缓存,如同以下示例:public, max-age=31536000。 完整的指令列表可以从MDN web文档中找到。

错误处理

Tinify API使用HTTP状态码来表示成功或者失败。2xx范围的状态码表示成功。4xx范围表示请求过程出现错误。 5xx状态码表示Tinify API暂时出现了问题。

错误响应示例

一旦出现错误,HTTP响应体将包含JSON格式的错误详情。message字段将包含简单可读的错误描述。

POST /shrink HTTP/1.1
Host: api.tinify.com
HTTP/1.1 401 Unauthorized
Content-Type: application/json

{
  "error": "Unauthorized",
  "message": "Credentials are invalid"
}

压缩计数

Web服务持续追踪您执行压缩的次数。大多数HTTP响应会带有这个月已经执行的压缩次数。

响应示例

在大多数响应中,会包含Compression-Count响应头,包含当前自然月期间使用此帐户进行压缩的次数。

POST /shrink HTTP/1.1
Host: api.tinify.com
Authorization: Basic YXBpOmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1

[binary]
HTTP/1.1 201 Created
Compression-Count: 12

[...]

需要帮助?想要反馈?

我们随时为您提供帮助,如果您遇到了困难,请通过support@tinify.com留言。 它也是向我们发送您所有建议和反馈的绝佳途径。

Try TinyPNG with a new browser

TinyPNG is created for modern browsers with HTML5 & CSS3 support. We have not tried it out in other browsers. The site may work, or it may not. If you see this message you may want to try a different browser!