Besoin aide crop PHP

Eléphanteau du PHP | 23 Messages

11 janv. 2022, 18:09

Bonjour à tous,
J'ai un petit soucis je voudrais utiliser ce code trouver sur php.net mais mon soucis c'est que c'est simplement pour le png, je me doute que je peux faire avec d'autre extension mais comment faire pour éviter de répéter le code pour chaque extension meerci pour vos réponses
$im = imagecreatefrompng('example.png');
$size = min(imagesx($im), imagesy($im));
$im2 = imagecrop($im, ['x' => 0, 'y' => 0, 'width' => $size, 'height' => $size]);
if ($im2 !== FALSE) {
    imagepng($im2, 'example-cropped.png');
    imagedestroy($im2);
}
imagedestroy($im);

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9163 Messages

11 janv. 2022, 18:22

Il faut forcément que tu utilises imagecreatefromXXX où X est le format de ton image.

Voici ci-dessous une fonction imagecreatefromany() qui va déterminer automatiquement le format et donc d'utiliser la bonne fonction correspondante.
function imagecreatefromany($filepath) {
    $type = exif_imagetype($filepath);
    $allowedTypes = array(1, 2, 3, 6, 18); // gif, jpg, png, bmp, webp
    if (!in_array($type, $allowedTypes)) return false;
    switch ($type) {
        case 1 :
            $im = imagecreatefromgif($filepath);
        break;
        case 2 :
            $im = imagecreatefromjpeg($filepath);
        break;
        case 3 :
            $im = imagecreatefrompng($filepath);
        break;
        case 6 :
            $im = imagecreatefrombmp($filepath);
        break;
        case 18 :
            $im = imagecreatefromwebp($filepath);
        break;
    }   
    return $im; 
} 
Quand tout le reste a échoué, lisez le mode d'emploi...

Eléphanteau du PHP | 23 Messages

11 janv. 2022, 19:09

Ok merci donc je vais utiliser ça ;)

Eléphanteau du PHP | 23 Messages

15 janv. 2022, 01:06

Dsl j'ai encore une question quand l'image est un png sans fond est qu'il crop le fond est bizarre rempli de pixel comment je peux contrait ça ? Y a t-il un moyen en PHP de voir si une image a un fond transparent ou pas ?

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9163 Messages

15 janv. 2022, 11:49

De mémoire il faut utiliser :
        imagealphablending($im, FALSE);
        imagesavealpha($im, TRUE);
Je te laisse vérifier dans la doc et faire des tests.
Quand tout le reste a échoué, lisez le mode d'emploi...