как вырезать картинку (не обрезая) с php - PullRequest
0 голосов
/ 20 апреля 2020

Я хочу вырезать часть фотографии, не растягивая ее. Что-то вроде фотографии, которую я выложил, вырежьте красную часть и получите фотографию № 2 с шириной 150 пикселей и высотой 100 пикселей и вырезкой сверху слева на фотографии введите описание изображения здесь

I пытался сделать это с этим кодом, но это не сработало. Этот код отделяет часть изображения, но не делает это с левого верхнего края изображения.


    function resizejpeg($dir, $newdir, $img, $max_w, $max_h, $th_w, $th_h)
{
    // set destination directory
    if (!$newdir) $newdir = $dir;

    // get original images width and height
    list($or_w, $or_h, $or_t) = getimagesize($dir.$img);

    // make sure image is a jpeg
    if ($or_t == 2) {

        // obtain the image's ratio
        $ratio = ($or_h / $or_w);

        // original image
        $or_image = imagecreatefromjpeg($dir.$img);

        // resize image?
        if ($or_w > $max_w || $or_h > $max_h) {

            // resize by height, then width (height dominant)
            if ($max_h < $max_w) {
                $rs_h = $max_h;
                $rs_w = $rs_h / $ratio;
            }
            // resize by width, then height (width dominant)
            else {
                $rs_w = $max_w;
                $rs_h = $ratio * $rs_w;
            }

            // copy old image to new image
            $rs_image = imagecreatetruecolor($rs_w, $rs_h);
            imagecopyresampled($rs_image, $or_image, 0, 0, 0, 0, $rs_w, $rs_h, $or_w, $or_h);
        }
        // image requires no resizing
        else {
            $rs_w = $or_w;
            $rs_h = $or_h;

            $rs_image = $or_image;
        }

        // generate resized image
        imagejpeg($rs_image, $newdir.$img, 100);

        $th_image = imagecreatetruecolor($th_w, $th_h);

        // cut out a rectangle from the resized image and store in thumbnail
        $new_w = (($rs_w / 2) - ($th_w / 2));
        $new_h = (($rs_h / 2) - ($th_h / 2));

        imagecopyresized($th_image, $rs_image, 0, 0, $new_w, $new_h, $rs_w, $rs_h, $rs_w, $rs_h);

        // generate thumbnail
        imagejpeg($th_image, $newdir.'thumb_'.$img, 100);

        return true;
    }

    // Image type was not jpeg!
    else {
        return false;
    }
}

$dir = './';
$img = '1.jpg';

$size = getimagesize($img);
$width = $size[0];
$height = $size[1];

resizejpeg($dir, '', $img, $width, $height, 150, 100);

1 Ответ

1 голос
/ 20 апреля 2020

Я не правильно понял, что вы имеете в виду, но на основании вашего описания вы пытаетесь получить изображение № 2, что означает, что вы пытаетесь обрезать изображение. Если это означает, что, возможно, этот код поможет

function crop($image_path, $output_path, $x, $y, $width, $height) {
    // load image
    $image = imagecreatefromjpeg($image_path);
    // crop the image
    $cropped_image = imagecrop($image, [
        'x' => $x, 
        'y' => $y, 
        'width' => $width,
        'height' => $height
        ]
    );
    // save it
    imagejpeg($cropped_image, $output_path);
}

, вы можете использовать его следующим образом

// input image path
$image = "img.jpg";
// output image path
$output = "crop_img.jpg";
// crop it from (0,0)
crop($image, $output, 0, 0, 150, 100);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...