简体   繁体   中英

PHP - Create thumbnail from picture and keeping proportion

I want to create a thumbnail image without black/white bars and have it keep aspect ratio

The thumbnail size should be 320x200 (px).

I actually wrote a function to create a thumbnail for a given resolution but I don't know how to keep the aspect ratio of the image

function imageResize($imageResourceId, $width, $height)
{
    $targetWidth = 320;
    $targetHeight = 200;
    $targetLayer = imagecreatetruecolor($targetWidth, $targetHeight);
    imagecopyresampled($targetLayer, $imageResourceId, 0, 0, 0, 0, $targetWidth, $targetHeight, $width, $height);
    return $targetLayer;
}

But I can't figure out a way to crop them and have them accommodated as I want. Thanks in advance!

To do this you can use imagecopyresampled function like this:

function imageResize($imageResourceId, $width, $height)
{
    $targetWidth = 320;
    $targetHeight = 200;

    $aspectRatio = $width / $height;
    $targetRatio = $targetWidth / $targetHeight;

    if ($aspectRatio > $targetRatio) {
        $newHeight = $targetHeight;
        $newWidth = $targetHeight * $aspectRatio;
    } else {
        $newWidth = $targetWidth;
        $newHeight = $targetWidth / $aspectRatio;
    }
    $targetLayer = imagecreatetruecolor($newWidth, $newHeight);
    imagecopyresampled($targetLayer, $imageResourceId, 0, 0, 0, 0, $newWidth, $newHeight, $width, $height);
    return $targetLayer;
}

Using this, the new Width and Height are calculated based on the aspect ratio of the original image.

More samples on: https://www.php.net/manual/en/function.imagecopyresampled.php

The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM