Avec le GD library, utilisez imagecopyresampled()
.
<?php
// The file
$filename = 'test.jpg';
$percent = 0.5;
// Content type
header('Content-type: image/jpeg');
// Get new dimensions
list($width, $height) = getimagesize($filename);
$new_width = $width * $percent;
$new_height = $height * $percent;
// Resample
$image_p = imagecreatetruecolor($new_width, $new_height);
$image = imagecreatefromjpeg($filename);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
// Output
imagejpeg($image_p, null, 100);
?>
Edit: Si vous voulez redimensionner le fichier d'image à une taille spécifiée, qui est un peu plus difficile. Tous les principaux formats d'image utilisent des taux de compression et de compression qui varient selon la nature de ce qui est compressé. Compressez ciel bleu clair et vous obtiendrez un meilleur taux de compression que vous ne serez la mer des gens. Le meilleur que vous pouvez faire est d'essayer une taille particulière est d'essayer une taille particulière et de voir ce que la taille du fichier est, en ajustant si nécessaire.
Resize ratio = desired file size/actual file size
Resize multipler = square root (resize ratio)
New height = resize multiplier * actual height
New width = resize multiplier * actual width
Ceci tient essentiellement compte d'une approximation du taux de compression attendu. Je m'attendrais à ce que vous ayez une certaine tolérance (comme +/- 5%) et vous pouvez modifier les chiffres si nécessaire.
Il n'existe aucun moyen direct de redimensionner à une taille de fichier particulière. Enfin, j'ajouterai que le redimensionnement à une taille de fichier particulière est plutôt inhabituel. Le redimensionnement à une hauteur et/ou une largeur particulière (maintien du rapport d'aspect) est beaucoup plus commun et attendu (par les utilisateurs).
Mise à jour: correctement signalé, la taille du fichier est erronée. Le ratio doit être la racine carrée des ratios de taille de fichier lorsque vous l'appliquez deux fois (une fois à la hauteur, une fois à la largeur).
Vous obtiendrez des fichiers de la moitié de la taille souhaitée, car le "ratio de redimensionnement" des composants fractionnaires est mis au carré. Si vous avez une image de 1Mo et que vous voulez un fichier (environ) 512KB, vous voulez le redimensionner pour que newheight = sqrt (2) * hauteur (de même pour la largeur) – dcrosta
Merci pour vos commentaires utiles – taras
@dcrosta: tout à fait raison. Fixé à mltiply par sqrt (ratio). – cletus