Задать вопрос
@teplyashin

Как остановить ImageCropAuto?

Добрый день, подскажите пожалуйста как можно реализовать данную затею, есть картинка, находиться ее большая сторона, и меньшая подгоняется под большую, получается квадрат, а потом с помощью ImageCropAuto обрезается белый фон до ближайшей границы самой картинки, и получившиеся размеры меня устраивают, но есть такие картинки которые к примеру 640х480 он дорисовывает до 640х640 и обрезает , но картинка маленькая и он ее режет до 320х320, а мне надо чтоб остановился на 500х500 подскажите как быть?
$im = imagecreatefromstring($current);

            // $cropped = imagecropauto($im, IMG_CROP_SIDES);
            // if ($cropped !== false) { // в случае возврата нового ресурса изображения
            //     imagedestroy($im);    // мы уничтожаем исходное изображение
            //     $im = $cropped;       // и назначаем обрезанное изображение в $im
            // }
                $width = imagesx($im);
                $height = imagesy($im);
                $maxSize = max($width,$height);
                $kw = $width / $maxSize;
                $kh = $height / $maxSize;
                $k = $kw > $kh ? $kw : $kh;
               
                $newImg = imagecreatetruecolor($maxSize, $maxSize);
                $bg = imagecolorallocate($newImg, $bgColor[0], $bgColor[1], $bgColor[2]);
                imagefill($newImg, 0, 0, $bg);
                if($k > 1) {
                        $newWidth = (int) ($width / $k);
                        $newHeight = (int) ($height / $k);
                    } else {
                        $newWidth = $width;
                        $newHeight = $height;
                    }
                    $left = (int) (($maxSize - $newWidth) / 2);
                    $top = (int) (($maxSize - $newHeight) / 2);
                    imagecopyresampled($newImg, $im, $left, $top, 0, 0, $newWidth, $newHeight, $width, $height);

            //   $im2 = imagecrop($newImg, ['x' => 0, 'y' => 0, 'width' => 500, 'height' => 500]);

            // if ($im2 !== FALSE) {
            //     header('Content-Type: image/jpeg');
            //     imagejpeg($im2);
            //     imagedestroy($im2);
            // }
            // else {
            //     echo 'Произошла ошибка.';
            // }
                    
                    header('Content-Type: image/jpeg');
                    imagejpeg($newImg, NULL, 100);
                    imagedestroy($newImg);

cropauto режет до 320х320 и центрирует правильно, а imagecrop режет при заданных 500х500 до этих размеров но не центрирует а просто режет и все. подскажите что делаю не правильно и как выйти из ситуации, спасибо за ответ.
  • Вопрос задан
  • 40 просмотров
Подписаться 1 Средний 3 комментария
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы