在PHP中创建方形1:1缩略图 [英] Create square 1:1 thumbnail in PHP

查看:139
本文介绍了在PHP中创建方形1:1缩略图的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

如何设置此代码以1:1(方形)返回图像?

How can I set this code to return images in 1:1 (square)?

目的是创建一个正方形(非拉伸)缩略图。

The purpose is to create a square (non stretched) thumbnail.

我尝试在'if部分'中进行更改。我得到一个方形图像,但伸展。我希望它被裁剪。

I've tried making changes in the 'if section'. I get a square image but stretched. I want it to be cropped.

define('THUMBNAIL_IMAGE_MAX_WIDTH', 150);
define('THUMBNAIL_IMAGE_MAX_HEIGHT', 150);

$source_image_path = {here the source filename};
$thumbnail_image_path = {here de thumb filename};

list($source_image_width, $source_image_height, $source_image_type) = getimagesize($source_image_path);
switch ($source_image_type) {
    case IMAGETYPE_GIF:
    $source_gd_image = imagecreatefromgif($source_image_path);
    break;
    case IMAGETYPE_JPEG:
    $source_gd_image = imagecreatefromjpeg($source_image_path);
    break;
    case IMAGETYPE_PNG:
    $source_gd_image = imagecreatefrompng($source_image_path);
    break;
}
$source_aspect_ratio = $source_image_width / $source_image_height;
$thumbnail_aspect_ratio = THUMBNAIL_IMAGE_MAX_WIDTH / THUMBNAIL_IMAGE_MAX_HEIGHT;
if ($source_image_width <= THUMBNAIL_IMAGE_MAX_WIDTH && $source_image_height <= THUMBNAIL_IMAGE_MAX_HEIGHT) {
    $thumbnail_image_width = $source_image_width;
    $thumbnail_image_height = $source_image_height;
} elseif ($thumbnail_aspect_ratio > $source_aspect_ratio) {
    $thumbnail_image_width = (int) (THUMBNAIL_IMAGE_MAX_HEIGHT * $source_aspect_ratio);
    $thumbnail_image_height = THUMBNAIL_IMAGE_MAX_HEIGHT;
} else {
    $thumbnail_image_width = THUMBNAIL_IMAGE_MAX_WIDTH;
    $thumbnail_image_height = (int) (THUMBNAIL_IMAGE_MAX_WIDTH / $source_aspect_ratio);
}
$thumbnail_gd_image = imagecreatetruecolor($thumbnail_image_width, $thumbnail_image_height);
imagecopyresampled($thumbnail_gd_image, $source_gd_image, 0, 0, 0, 0, $thumbnail_image_width, $thumbnail_image_height, $source_image_width, $source_image_height);
imagejpeg($thumbnail_gd_image, $thumbnail_image_path, 90);

PS。这不是重复,我已经阅读了这个主题的几个问题,但是我无法将其整合到我的代码中。

推荐答案

这个功能完成了这个伎俩

function crop_img($imgSrc){
    //getting the image dimensions
    list($width, $height) = getimagesize($imgSrc);

    //saving the image into memory (for manipulation with GD Library)
    $myImage = imagecreatefromjpeg($imgSrc);

    // calculating the part of the image to use for thumbnail
    if ($width > $height) {
        $y = 0;
        $x = ($width - $height) / 2;
        $smallestSide = $height;
    } else {
        $x = 0;
        $y = ($height - $width) / 2;
        $smallestSide = $width;
    }

    // copying the part into thumbnail
    $thumbSize = min($width,$height);
    $thumb = imagecreatetruecolor($thumbSize, $thumbSize);
    imagecopyresampled($thumb, $myImage, 0, 0, $x, $y, $thumbSize, $thumbSize, $smallestSide, $smallestSide);

    unlink($imgSrc);
    imagejpeg($thumb,$imgSrc);
    @imagedestroy($myImage);
    @imagedestroy($thumb);
}

发现于: PHP裁剪图像以固定宽度和高度而不会丢失尺寸比率

这篇关于在PHP中创建方形1:1缩略图的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆