すべてのプロダクト
Search
ドキュメントセンター

Object Storage Service:画質の調整

最終更新日:Sep 30, 2024

品質調整操作は、画像を圧縮するためにソース画像のフォーマットを使用する。 品質調整パラメーターを使用して、Object Storage Service (OSS) に保存されているソースイメージの品質を調整できます。 このトピックでは、画質調整のパラメーターと例について説明します。

重要

品質調整は、JPGおよびWebP画像にのみ有効です。

パラメーター

アクション: quality

次の表に、ソースイメージの品質を調整するために設定できるパラメーターを示します。

パラメーター

説明

有効値

q

イメージの相対的な品質を指定し、パーセンテージに基づいてソースイメージを圧縮します。

ソース画像の画質が100% の場合、quality,q_90パラメーターを追加すると、画質が90% の画像を取得できます。 ソース画像の画質が80% の場合、quality,q_90パラメーターを追加すると、画質が72% の画像を取得できます。

説明

qパラメーターは、画像の相対的な品質を指定するためにJPG画像にのみ有効です。 ソースイメージがWebP形式の場合、このパラメーターはQパラメーターと同じように機能し、イメージの絶対品質を指定します。

[1,100]

Q

イメージの絶対的な品質を指定します。

  • ソース画像品質がQの指定値以上である場合、ソース画像はQの指定値に基づいて圧縮される。

    たとえば、ソース画質が95% の場合、quality,Q_90パラメーターを追加すると、画質が90% の画像を取得できます。

  • ソース画像の品質が指定された値Qより小さい場合、ソース画像は圧縮されず、品質調整を実行した後に得られる画像の品質はソース画像の品質と同じになります。

    たとえば、ソースの画質が80% の場合、品質Q_90を追加すると、画質が80% の画像を取得できます。

説明

Qパラメーターは、JPGおよびWebPイメージに対してのみ有効です。

[1,100]

方法

パブリック読み取りイメージまたはパブリック読み取り /書き込みイメージの品質を調整する

イメージ処理 (IMG) パラメーターをパブリック読み取りまたはパブリック読み取り書き込みイメージのURLに追加して、イメージの品質を調整できます。

このセクションでは、中国 (杭州) リージョンのoss-console-img-demo-cn-hangzhouバケットでexample.jpgという名前の画像の品質を調整する方法の例を示します。 イメージは次のURLでホストされます。

画像の相対的な品質を調整する

画像の相対的な品質を80%: quality,q_80に設定します。 次のURLは、上記のパラメーターに基づいて画像を処理するために使用されます。 https://oss-console-img-demo-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/example.jpg?x-oss-process=image/quality,q_80

画像の絶対品質を調整する

画像の絶対品質を90%: quality,Q_90に設定します。 次のURLは、上記のパラメーターに基づいて画像を処理するために使用されます。 https://oss-console-img-demo-cn-hangzhou.oss-cn-hangzhou.aliyuncs.com/example.jpg?x-oss-process=image/quality,Q_90

プライベート画像の品質を調整する

OSS SDKおよびAPI操作を使用して、プライベートイメージの品質を調整できます。

OSS SDKの使用

次のサンプルコードは、一般的なプログラミング言語のOSS SDKを使用してプライベートイメージの品質を調整する方法の例を示しています。 他のプログラミング言語を使用してプライベートイメージの品質を調整する方法の詳細については、「概要」をご参照ください。

Java

Java 3.17.4以降のOSS SDKが必要です。

import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.GetObjectRequest;
import java.io.File;

public class Demo {
    public static void main(String[] args) throws Throwable {
        // In this example, the endpoint of the China (Hangzhou) region is used. Specify your actual endpoint. 
        String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
        // Specify the region of the bucket in which the private image is stored. Example: cn-hangzhou. 
        String region = "cn-hangzhou";
        // Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. 
        EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
        // Specify the name of the bucket. Example: examplebucket. 
        String bucketName = "examplebucket";
        // Specify the full path of the object. Do not include the bucket name in the full path. 
        String objectName = "example.jpg";
        // Specify the full path of the local file. Example: D:\\dest.jpg. If a file that has the same name already exists in the path, the processed image overwrites the file. Otherwise, the processed image is saved in the path. 
        String pathName = "D:\\dest.jpg";

        // Create an OSSClient instance. 
        ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
        clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
        OSS ossClient = OSSClientBuilder.create()
                .endpoint(endpoint)
                .credentialsProvider(credentialsProvider)
                .clientConfiguration(clientBuilderConfiguration)
                .region(region)
                .build();

        try {
            // Set the absolute quality of the source image to 80%. 
            String image = "image/quality,Q_80";
            GetObjectRequest request = new GetObjectRequest(bucketName, objectName);
            request.setProcess(image);
            // Set the name of the processed image to dest.jpg and save it to your local computer. 
            // If you specify only the name of the local file such as dest.jpg without specifying the local path of the file, the processed image is saved to the local path of the project to which the sample program belongs. 
            ossClient.getObject(request, new File("D:\\dest.jpg"));
        } catch (OSSException oe) {
            System.out.println("Caught an OSSException, which means your request made it to OSS, "
                    + "but was rejected with an error response for some reason.");
            System.out.println("Error Message:" + oe.getErrorMessage());
            System.out.println("Error Code:" + oe.getErrorCode());
            System.out.println("Request ID:" + oe.getRequestId());
            System.out.println("Host ID:" + oe.getHostId());
        } catch (ClientException ce) {
            System.out.println("Caught an ClientException, which means the client encountered "
                    + "a serious internal problem while trying to communicate with OSS, "
                    + "such as not being able to access the network.");
            System.out.println("Error Message:" + ce.getMessage());
        } finally {
            if (ossClient != null) {
                ossClient.shutdown();
            }
        }
    }
}
PHP

PHP 2.7.0以降のOSS SDKが必要です。

<?php
if (is_file(__DIR__ . '/../autoload.php')) {
    require_once __DIR__ . '/../autoload.php';
}
if (is_file(__DIR__ . '/../vendor/autoload.php')) {
    require_once __DIR__ . '/../vendor/autoload.php';
}
use OSS\Credentials\EnvironmentVariableCredentialsProvider;
use OSS\OssClient;

// Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. 
$provider = new EnvironmentVariableCredentialsProvider();
// Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. 
$endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Specify the name of the bucket. Example: examplebucket. 
$bucket= "examplebucket";
// Specify the full path of the object. Example: exampledir/exampleobject.jpg. Do not include the bucket name in the full path. 
$object = "src.jpg";
// Specify the full path of the local file. Example: D:\\dest.jpg. If a file that has the same name already exists in the path, the processed image overwrites the file. Otherwise, the processed image is saved in the path. 
// If you specify only the name of the local file such as dest.jpg without specifying the local path of the file, the processed image is saved to the local path of the project to which the sample program belongs. 
$download_file = "D:\\dest.jpg";

$config = array(
        "provider" => $provider,
        "endpoint" => $endpoint,        
        "signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
        // Specify the ID of the Alibaba Cloud region in which the bucket is located. 
        "region" => "cn-hangzhou"
    );
$ossClient = new OssClient($config);

// Set the absolute quality of the source image to 80%. 
$image = "image/quality,Q_80";

$options = array(
    OssClient::OSS_FILE_DOWNLOAD => $download_file,
    OssClient::OSS_PROCESS => $image);

// Save the processed image to your local computer. 
$ossClient->getObject($bucket, $object, $options);                           
Python

Python 2.18.4以降のOSS SDKが必要です。

# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider

# Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. 
auth = oss2.ProviderAuthV4(EnvironmentVariableCredentialsProvider())
# Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. 
## Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. 
endpoint = 'https://oss-cn-hangzhou.aliyuncs.com'
# Specify the ID of the Alibaba Cloud region in which the bucket is located. 
region = 'cn-hangzhou'
bucket = oss2.Bucket(auth, endpoint, 'examplebucket', region=region)
# Specify the name of the source image. If the image is not stored in the root directory of the bucket, you must specify the full path of the image. Example: exampledir/example.jpg. 
key = 'src.jpg'
# Specify the name of the processed image. 
new_pic = 'D:\\dest.jpg'

# Set the absolute quality of the source image to 80%. 
image = 'image/quality,Q_80'
bucket.get_object_to_file(key, new_pic, process=image)
Go

Go 3.0.2以降のOSS SDKが必要です。

package main

import (
	"fmt"
	"os"

	"github.com/aliyun/aliyun-oss-go-sdk/oss"
)

func HandleError(err error) {
	fmt.Println("Error:", err)
	os.Exit(-1)
}

func main() {
	// Obtain access credentials from environment variables. Before you run the sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured. 
	provider, err := oss.NewEnvironmentVariableCredentialsProvider()
	if err != nil {
		fmt.Println("Error:", err)
		os.Exit(-1)
	}

	// Create an OSSClient instance. 
	// Specify the endpoint of the region in which the bucket is located. For example, if the bucket is located in the China (Hangzhou) region, set the endpoint to https://oss-cn-hangzhou.aliyuncs.com. Specify your actual endpoint. 
	client, err := oss.New("https://oss-cn-hangzhou.aliyuncs.com", "", "", oss.SetCredentialsProvider(&provider), oss.AuthVersion(oss.AuthV4), oss.Region("cn-hangzhou"))
	if err != nil {
		HandleError(err)
	}

	// Specify the name of the bucket in which the source image is stored. Example: examplebucket. 
	bucketName := "examplebucket"
	bucket, err := client.Bucket(bucketName)
	if err != nil {
		HandleError(err)
	}

	// Specify the name of the source image. If the image is not stored in the root directory of the bucket, you must specify the full path of the image. Example: exampledir/example.jpg. 
	sourceImageName := "src.jpg"
	// Specify the name of the processed image. 
	targetImageName := "D://dest.jpg"
	// Set the absolute quality of the source image to 80%. 
	image := "image/quality,Q_80"
	err = bucket.GetObjectToFile(sourceImageName, targetImageName, oss.Process(image))
	if err != nil {
		HandleError(err)
	}
}

OSS APIの使用

ビジネスで高度なカスタマイズが必要な場合は、RESTful APIを直接呼び出すことができます。 APIを直接呼び出すには、コードに署名計算を含める必要があります。 詳しくは、「GetObject」をご参照ください。

GetObject操作を呼び出すときに、品質調整パラメーターを使用して画像を処理できます。

GET /oss.jpg?x-oss-process=image/quality,Q_80 HTTP/1.1
Host: oss-example.oss-cn-hangzhou.aliyuncs.com
Date: Fri, 28 Oct 2022 06:40:10 GMT
Authorization: OSS qn6q**************:77Dv****************