Ajoutez des paramètres de redimensionnement d'image à une requête GetObject pour redimensionner les images à la volée.
Scénarios
Conception web : adaptez les images aux différentes tailles d'écran et résolutions dans les applications web et mobiles.
Réseaux sociaux : convertissez les images téléchargées par les utilisateurs vers des dimensions de prévisualisation standard.
Reconnaissance et analyse d'images : mettez les images à l'échelle pour améliorer l'efficacité du traitement dans les pipelines de vision par ordinateur et d'apprentissage automatique.
Limites
|
Limite |
Élément |
Description |
|
Limites de l'image source |
Format d'image |
L'image source doit être au format JPG, PNG, BMP, GIF, WebP, TIFF ou HEIC. |
|
Taille du fichier |
La taille de l'image source ne peut pas dépasser 20 Mo. Pour augmenter cette limite, soumettez une demande dans le Quota Center. |
|
|
Largeur et hauteur |
La largeur ou la hauteur de l'image source ne peut pas dépasser 30 000 pixels, et son nombre total de pixels ne peut pas dépasser 250 millions. Remarque
Pour les images animées, telles que les GIF, le nombre total de pixels est calculé comme suit : |
|
|
Limites de l'image mise à l'échelle |
Mise à l'échelle de l'image |
La largeur ou la hauteur d'une image mise à l'échelle ne peut pas dépasser 16 384 pixels, et son nombre total de pixels ne peut pas dépasser 16 777 216. |
Procédure
Ajoutez ?x-oss-process=image/resize,parameter_value à l'URL d'une image. OSS traite l'image en temps réel et renvoie le résultat. image/resize spécifie une opération de redimensionnement, où parameter est un paramètre de redimensionnement pris en charge et value est sa valeur correspondante. Tous les paramètres disponibles sont répertoriés dans la section Paramètres. Vous pouvez combiner plusieurs paramètres.
Pour les images en lecture publique, ajoutez les paramètres directement à l'URL. Pour les images privées, générez une URL signée à l'aide d'un SDK ou appelez une opération API.
Images en lecture publique
Ajoutez ?x-oss-process=image/resize,parameter_value à l'URL d'une image en lecture publique. Remplacez parameter_value par les paramètres et valeurs requis.
|
URL de l'image d'origine |
URL de l'image avec paramètres de redimensionnement |
|
https://oss-console-img-demo-cn-hangzhou-3az.oss-cn-hangzhou.aliyuncs.com/example1.jpg |
Images privées
Utilisez un SDK OSS pour générer une URL signée incluant des paramètres de redimensionnement d'image. Les exemples suivants génèrent une URL signée avec ?x-oss-process=image/resize,parameter_value pour une image privée :
Java
package com.aliyun.oss.demo;
import com.aliyun.oss.*;
import com.aliyun.oss.common.auth.*;
import com.aliyun.oss.common.comm.SignVersion;
import com.aliyun.oss.model.GeneratePresignedUrlRequest;
import java.net.URL;
import java.util.Date;
public class Demo {
public static void main(String[] args) throws Throwable {
// This example uses the endpoint of the China (Hangzhou) region. Replace the value with the actual endpoint.
String endpoint = "https://oss-cn-hangzhou.aliyuncs.com";
// Obtain credentials from environment variables. Ensure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET variables are configured before running the code.
EnvironmentVariableCredentialsProvider credentialsProvider = CredentialsProviderFactory.newEnvironmentVariableCredentialsProvider();
// Specify the bucket name. Example: examplebucket.
String bucketName = "examplebucket";
// Specify the object's full path. If the object is not in the bucket's root directory, you must include its full path, such as exampledir/exampleobject.png.
String objectName = "exampledir/exampleobject.png";
// Specify the region ID where the bucket is located. For example, the region ID for China (Hangzhou) is cn-hangzhou.
String region = "cn-hangzhou";
// Create an OSSClient instance.
// Call the shutdown method to release resources when the OSSClient instance is no longer needed.
ClientBuilderConfiguration clientBuilderConfiguration = new ClientBuilderConfiguration();
clientBuilderConfiguration.setSignatureVersion(SignVersion.V4);
OSS ossClient = OSSClientBuilder.create()
.endpoint(endpoint)
.credentialsProvider(credentialsProvider)
.clientConfiguration(clientBuilderConfiguration)
.region(region)
.build();
try {
// Resize the image. Replace parameter_value with a specific parameter and value. For example, p_50 proportionally scales the image to 50% of its original size.
String style = "image/resize,parameter_value";
// Specify the expiration time of the signed URL. In this example, the signed URL expires in 3,600 seconds.
Date expiration = new Date(new Date().getTime() + 3600 );
GeneratePresignedUrlRequest req = new GeneratePresignedUrlRequest(bucketName, objectName, HttpMethod.GET);
req.setExpiration(expiration);
req.setProcess(style);
URL signedUrl = ossClient.generatePresignedUrl(req);
System.out.println(signedUrl);
} 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();
}
}
}
}
Python
# -*- coding: utf-8 -*-
import oss2
from oss2.credentials import EnvironmentVariableCredentialsProvider
# Obtain credentials from environment variables. Before you run this 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 bucket name.
bucket = 'examplebucket'
# Specify the endpoint of the region where the bucket is located. This example uses the China (Hangzhou) region.
endpoint = 'https://oss-cn-hangzhou.aliyuncs.com'
# Specify the region ID.
region = 'cn-hangzhou'
bucket = oss2.Bucket(auth, endpoint, bucket, region=region)
# Specify the name of the source image. If the image is not in the root directory of the bucket, include the full path, such as exampledir/exampleobject.jpg.
key = 'exampledir/exampleobject.png'
# Specify the expiration time in seconds.
expire_time = 3600
# Resize the image. Replace parameter_value with a specific parameter and value. For example, p_50 proportionally scales the image to 50% of its original size.
image_process = 'image/resize,parameter_value'
# Generate a signed URL that includes image processing parameters.
url = bucket.sign_url('GET', key, expire_time, params={'x-oss-process': image_process}, slash_safe=True)
# Print the signed URL.
print(url)
PHP
<?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 credentials from environment variables. Before you run this sample code, make sure that the OSS_ACCESS_KEY_ID and OSS_ACCESS_KEY_SECRET environment variables are configured.
$provider = new EnvironmentVariableCredentialsProvider();
// Set $endpoint to your bucket's region endpoint. For example, for a bucket in the China (Hangzhou) region, use https://oss-cn-hangzhou.aliyuncs.com.
$endpoint = "yourEndpoint";
// Specify the bucket name. Example: examplebucket.
$bucket= "examplebucket";
// Specify the full path of the object, such as exampledir/exampleobject.jpg. The full path cannot contain the bucket name.
$object = "exampledir/exampleobject.jpg";
$config = array(
"provider" => $provider,
"endpoint" => $endpoint,
"signatureVersion" => OssClient::OSS_SIGNATURE_VERSION_V4,
"region"=> "cn-hangzhou"
);
$ossClient = new OssClient($config);
// Generate a signed URL with image processing parameters. The URL is valid for 3,600 seconds and can be directly accessed in a browser.
$timeout = 3600;
$options = array(
// Resize the image. Replace parameter_value with a specific parameter and value. For example, p_50 proportionally scales the image to 50% of its original size.
OssClient::OSS_PROCESS => "image/resize,parameter_value");
$signedUrl = $ossClient->signUrl($bucket, $object, $timeout, "GET", $options);
print("signed url: \n" . $signedUrl);
Go
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 credentials from environment variables. Before you run this 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.
// Set yourEndpoint to the endpoint for your bucket's region. This example uses https://oss-cn-hangzhou.aliyuncs.com for the China (Hangzhou) region. Replace it with your actual endpoint.
// Set yourRegion to the region where your bucket is located. This example uses cn-hangzhou for the China (Hangzhou) region. Replace it with your actual region.
clientOptions := []oss.ClientOption{oss.SetCredentialsProvider(&provider)}
clientOptions = append(clientOptions, oss.Region("yourRegion"))
// Set the signature version.
clientOptions = append(clientOptions, oss.AuthVersion(oss.AuthV4))
client, err := oss.New("yourEndpoint", "", "", clientOptions...)
if err != nil {
HandleError(err)
}
// Specify the bucket name.
bucketName := "examplebucket"
bucket, err := client.Bucket(bucketName)
if err != nil {
HandleError(err)
}
// Specify the image's full path. If the image is not in the bucket's root directory, include the full path (e.g., exampledir/exampleobject.png).
ossImageName := "exampledir/exampleobject.png"
// Generate a signed URL that is valid for 3,600 seconds. The maximum validity period is 32,400 seconds.
// Resize the image. Replace parameter_value with a specific parameter and value. For example, p_50 proportionally scales the image to 50% of its original size.
signedURL, err := bucket.SignURL(ossImageName, oss.HTTPGet, 3600, oss.Process("image/resize,parameter_value"))
if err != nil {
HandleError(err)
} else {
fmt.Println(signedURL)
}
}
Voici un exemple d'URL signée générée :
https://examplebucket.oss-cn-hangzhou.aliyuncs.com/exampledir/exampleobject.png?x-oss-process=image%2Fresize%2Cp_50&x-oss-date=20241111T113707Z&x-oss-expires=3600&x-oss-signature-version=OSS4-HMAC-SHA256&x-oss-credential=LTAI********************%2F20241111%2Fcn-hangzhou%2Foss%2Faliyun_v4_request&x-oss-signature=6fd07a2ba50bf6891474dc56aed976b556b6fbcd901cfd01bcde5399bf4802cb
D'autres exemples de SDK sont disponibles dans la référence SDK.
Paramètres
Opération : resize
Mise à l'échelle proportionnelle
Le paramètre p met une image à l'échelle selon un pourcentage de sa taille d'origine.
|
Paramètre |
Description |
Valeur |
|
p |
Facteur de mise à l'échelle exprimé en pourcentage. |
Entier compris dans la plage [1, 1000]. Une valeur inférieure à 100 réduit l'image, tandis qu'une valeur supérieure à 100 l'agrandit. |
Les images animées ne prennent pas en charge cette mise à l'échelle proportionnelle.
Mise à l'échelle par largeur et hauteur
Utilisez les paramètres w et h pour spécifier la largeur et la hauteur, ainsi que le paramètre m pour contrôler le mode de mise à l'échelle. Pour contrôler le côté le plus long ou le plus court, utilisez le paramètre l ou s. Pour autoriser l'agrandissement, définissez le paramètre limit sur 0.
|
Paramètre |
Description |
Valeur |
|
w |
Spécifie la largeur de l'image de sortie, en pixels. |
[1,16384] |
|
h |
Spécifie la hauteur de l'image de sortie, en pixels. |
[1,16384] |
|
m |
Spécifie le mode de mise à l'échelle. |
Chaque mode est illustré dans la section Méthodes de calcul de la mise à l'échelle. Remarque
Si vous spécifiez le paramètre |
|
l |
Spécifie le côté le plus long de l'image de sortie, en pixels. Remarque
Le côté le plus long correspond à la valeur la plus élevée entre la largeur et la hauteur. Par exemple, pour une image de 100 px × 200 px, le côté le plus long est de 200 px et le côté le plus court est de 100 px. |
[1,16384] |
|
s |
Spécifie le côté le plus court de l'image de sortie, en pixels. |
[1,16384] |
|
limit |
Indique s'il faut autoriser l'agrandissement lorsque les dimensions cibles sont supérieures aux dimensions de l'image d'origine. Important
Par défaut, si les dimensions cibles sont supérieures à celles de l'original, l'image d'origine est renvoyée. Pour autoriser l'agrandissement, définissez le paramètre |
Remarque
Pour les images animées, vous ne pouvez les réduire qu'en spécifiant une largeur et une hauteur. La mise à l'échelle proportionnelle et l'agrandissement ne sont pas pris en charge. |
|
color |
Définit la couleur de remplissage lorsque le mode de mise à l'échelle est pad. |
Valeur de couleur RVB. Par exemple, 000000 représente le noir et FFFFFF représente le blanc. Valeur par défaut : FFFFFF (blanc) |
-
Si vous spécifiez uniquement la largeur ou uniquement la hauteur :
Lorsque le mode de mise à l'échelle est lfit, mfit ou fixed, l'image est mise à l'échelle de manière proportionnelle. Par exemple, si l'image source est de 256 px × 144 px et que vous réduisez sa hauteur à 100 px, la largeur est réduite à 178 px.
Lorsque le mode de mise à l'échelle est pad ou fill, la largeur et la hauteur de l'image source sont mises à l'échelle aux valeurs spécifiées. Par exemple, si l'image source est de 256 px × 144 px et que vous réduisez la hauteur à 100 px, la largeur est également réduite à 100 px.
Si vous spécifiez uniquement le paramètre
lous, l'image est mise à l'échelle de manière proportionnelle à la longueur de côté spécifiée. Le paramètremest ignoré.Lorsque les paramètres
letssont tous deux spécifiés, le paramètremdétermine le comportement de mise à l'échelle. Le rapport d'aspect est toujours préservé. Si le paramètremn'est pas spécifié, le modelfitpar défaut est utilisé.
Méthodes de mise à l'échelle
|
Taille de l'image d'origine |
Taille cible |
Mode de mise à l'échelle |
Taille après mise à l'échelle |
|
200 px × 100 px |
150 px × 80 px |
lfit (par défaut) Met l'image à l'échelle de manière proportionnelle pour créer la vignette la plus grande possible qui s'insère dans les dimensions cibles. |
150 px × 75 px
|
|
mfit Met l'image à l'échelle de manière proportionnelle pour créer la plus petite vignette capable de couvrir entièrement les dimensions cibles. |
160 px × 80 px
|
||
|
fill Met l'image à l'échelle de manière proportionnelle afin de couvrir complètement la largeur et la hauteur cibles, puis recadre l'excédent pour correspondre aux dimensions cibles. |
150 px × 80 px
|
||
|
pad Met l'image à l'échelle de manière proportionnelle pour qu'elle tienne dans la largeur et la hauteur cibles, puis remplit la zone restante avec une couleur unie pour atteindre les dimensions cibles. |
150 px × 80 px
|
||
|
fixed Met l'image à l'échelle exactement selon la largeur et la hauteur spécifiées, sans tenir compte du rapport d'aspect. Cette opération peut déformer l'image. |
150 px × 80 px
|
Pour les modes lfit et mfit, si le calcul de la mise à l'échelle donne une valeur décimale, les dimensions sont arrondies à l'entier le plus proche.
Exemples
Réduction proportionnelle
Agrandissement proportionnel
Réduction à largeur fixe
Agrandissement à largeur fixe
Réduction à hauteur fixe
Agrandissement à hauteur fixe
Mise à l'échelle selon le côté le plus long
Mise à l'échelle selon le côté le plus court
Mise à l'échelle avec remplissage
Mise à l'échelle et recadrage
Mise à l'échelle forcée
Facturation
Le redimensionnement d'images entraîne les frais suivants. Pour plus d'informations sur les tarifs, consultez la page Tarification d'OSS.
-
API
Élément facturable
Description
GetObject
Requêtes GET
Des frais de requête vous sont facturés en fonction du nombre de requêtes abouties.
Trafic sortant via Internet
Si vous appelez l'opération GetObject via un endpoint public, tel que oss-cn-hangzhou.aliyuncs.com, ou un endpoint d'accélération, tel que oss-accelerate.aliyuncs.com, des frais de trafic sortant via Internet vous sont facturés en fonction de la taille des données.
Récupération d'objets IA
Si des objets IA sont récupérés, des frais de récupération de données IA vous sont facturés en fonction de la taille des données IA récupérées.
Récupération d'objets Archive dans un bucket pour lequel l'accès en temps réel est activé
Si vous récupérez des objets Archive dans un bucket pour lequel l'accès en temps réel est activé, des frais de récupération de données Archive vous sont facturés en fonction de la taille des objets Archive récupérés.
Frais d'accélération du transfert
Si vous activez l'accélération du transfert et utilisez un endpoint d'accélération pour accéder à votre bucket, des frais d'accélération du transfert vous sont facturés en fonction de la taille des données.
API associées
Pour une personnalisation avancée, effectuez directement des requêtes REST API. Cela nécessite le calcul manuel de la signature. Consultez la section Signature Version 4 (recommandée).
Pour traiter une image, ajoutez des paramètres de redimensionnement à l'opération GetObject. Pour plus d'informations, consultez l'opération GetObject.
GET /oss.jpg?x-oss-process=image/resize,p_50 HTTP/1.1
Host: oss-example.oss-cn-hangzhou.aliyuncs.com
Date: Fri, 28 Oct 2022 06:40:10 GMT
Authorization: SignatureValue



















