php img большие пальцы не меняются - PullRequest
0 голосов
/ 02 октября 2018

У меня есть код, чтобы сделать превью из исходного изображения пользователя.Мне нужно иметь хардкорную ширину и высоту для большого пальца, и это 160 х 160. Моя проблема не идеальная картинка.Я имею в виду, что когда пользователь хочет добавить img, ведьма шире, чем выше, тогда мой эскиз выглядит плохо и растягивается - и происходит то же самое, когда оригинал img выше, чем шире - тогда большой палец сильно сжимается.Я думал, что я должен манипулировать с функцией imagecopyresampled (), но я думаю, что это был плохой выбор.Мой вопрос: что нужно сделать, чтобы большие пальцы не были сжаты или растянуты и вырезали их, например, из центра исходного изображения?Мой код выглядит следующим образом:

$imgOrginalsize = getimagesize($file);
        $ratio = $imgOrginalsize[0] / $imgOrginalsize[1];
        $h = 160;
        $w = 160;

 $file_name = basename($file);

        switch (strtolower($imgOrginalsize['mime'])) {
            case 'image/jpeg':
                $img = imagecreatefromjpeg($file);
                $new = imagecreatetruecolor($w, $h);
                imagecopyresampled($new, $img, 0, 0, 0, 0, $w, $h, $imgOrginalsize[0], $imgOrginalsize[1]);
                imagejpeg($new, $pathToSave . $file_name, 100);
                imagedestroy($new);
                break;
            case 'image/png':
                $img = imagecreatefrompng($file);
                $new = imagecreatetruecolor($w, $h);
                imagecopyresampled($new, $img, 0, 0, 0, 0, $w, $h, $imgOrginalsize[0], $imgOrginalsize[1]);
                imagepng($new, $pathToSave . $file_name, 100);
                imagedestroy($new);
                break;
            default:
                var_dump('error default');
                exit();
        }

Теперь большие пальцы выглядят плохо и, например, сжаты - оригинал img намного выше, вы знаете, что я имею в виду, мне не нужны миниатюры всей картинки - я могу обрезатьиз левого верхнего угла (или из центра оригинального img), но я не хочу сжимать или растягивать:

enter image description here

1 Ответ

0 голосов
/ 02 октября 2018

Попробуйте imagecrop ($ img, ['x' => 0, 'y' => 0, 'width' => $ size, 'height' => $ size]);

См. http://php.net/manual/en/function.imagecrop.php

Замените размер $ на желаемую ширину / высоту

Ссылка также содержит пример ее центрирования.

...