Библиотека GD по-разному работает на сервере - PullRequest
0 голосов
/ 08 октября 2018

У меня проблема с моими изображениями при использовании библиотеки GD на моем сайте.Есть ли проблема библиотеки GD в Linux?Я реализовал изменение размера и обрезку изображения с помощью библиотеки GD, но каким-то образом работает только изменение размера.Кроме того, PNG изображения имеют черный фон после изменения размера.Мои коды работают нормально на локальном, но не на моем сайте.Я не получил никаких ошибок, поэтому я не уверен, где проблема.

Это мой код:

        $info = getimagesize($src);

        $source_image = '';
        if ($info['mime'] == 'image/jpeg')
            $source_image = imagecreatefromjpeg($src);

        elseif ($info['mime'] == 'image/gif')
            $source_image = imagecreatefromgif($src);

        elseif ($info['mime'] == 'image/png')
            $source_image = imagecreatefrompng($src);

        $cropped = imagecropauto($source_image, IMG_CROP_DEFAULT);
        if ($cropped !== false) {
            imagedestroy($source_image);
            $source_image = $cropped;
        }

        $width = imagesx($source_image);
        $height = imagesy($source_image);

        $maxHeight = floor($height * ($maxWidth / $width));
        $dst = imagecreatetruecolor($maxWidth, $maxHeight);

        $background = imagecolorallocate($dst, 0, 0, 0);
        imagecolortransparent($dst, $background);
        imagealphablending($dst, false);
        imagesavealpha($dst,true);

        imagecopyresampled($dst, $source_image, 0, 0, 0, 0, $maxWidth, $maxHeight, $width, $height);

        if ($info['mime'] == 'image/jpeg')
            imagejpeg($dst, $newFilename);

        elseif ($info['mime'] == 'image/gif')
            imagegif($dst, $newFilename);

        elseif ($info['mime'] == 'image/png')
            imagepng($dst, $newFilename);

Пожалуйста, помогите.Спасибо

1 Ответ

0 голосов
/ 13 июня 2019

Замените IMG_CROP_DEFAULT на IMG_CROP_SIDES, также прочитайте документацию нажмите здесь вы также заполните цвет, используя

<?php
    // Create a 300x300px transparant image with a 100px wide red circle in the middle
    $i = imagecreatetruecolor(300, 300);
    imagealphablending($i, FALSE);
    imagesavealpha($i, TRUE);
    $transparant = imagecolorallocatealpha($i, 0xDD, 0xDD, 0xDD, 0x7F);
    imagecolortransparent($i, $transparant); // Set background transparent
    imagefill($i, 0, 0, $transparant);
    $red = imagecolorallocate($i, 0xFF, 0x0, 0x0);
    imagefilledellipse($i, 150, 150, 100, 100, $red);
    imagepng($i, "red_300.png");

    // Crop away transparant parts and save
    $i2 = imagecropauto($i, IMG_CROP_DEFAULT); //Attempts to use IMG_CROP_TRANSPARENT and if it fails it falls back to IMG_CROP_SIDES.
    imagepng($i2, "red_crop_trans.png");
    imagedestroy($i2);

    // Crop away bg-color parts and save
    $i2 = imagecropauto($i, IMG_CROP_SIDES);
    imagepng($i2, "red_crop_sides.png");
    imagedestroy($i2);

    // clean up org image
    imagedestroy($i);

?>
...