尝试使用PHP GD以固定的宽度/高度生成按比例裁剪的缩略图

尝试使用PHP GD以固定的宽度/高度生成按比例裁剪的缩略图,php,image,gd,thumbnails,Php,Image,Gd,Thumbnails,我正在尝试用PHP和GD创建一个缩略图生成器,它将拍摄图像并将其缩小到固定的宽度/高度。它从原始图像(基于我的固定宽度/高度)中获取的正方形将来自图像的中心,以提供按比例正确的缩略图 我将尝试用一些漂亮的ASCII:}来演示这个令人困惑的句子 LANDSCAPE EXAMPLE: XXXXXXXXXXXXXXXX XXXXOOOOOOOOXXXX XXXXOOOOOOOOXXXX XXXXOOOOOOOOXXXX XXXXOOOOOOOOXXXX XXXXXXXXXXXXXXXX X

我正在尝试用PHP和GD创建一个缩略图生成器,它将拍摄图像并将其缩小到固定的宽度/高度。它从原始图像(基于我的固定宽度/高度)中获取的正方形将来自图像的中心,以提供按比例正确的缩略图

我将尝试用一些漂亮的ASCII:}来演示这个令人困惑的句子

LANDSCAPE EXAMPLE:

XXXXXXXXXXXXXXXX
XXXXOOOOOOOOXXXX
XXXXOOOOOOOOXXXX
XXXXOOOOOOOOXXXX
XXXXOOOOOOOOXXXX
XXXXXXXXXXXXXXXX

    XXXXXXXX    
    XXXXXXXX    
    XXXXXXXX    
    XXXXXXXX    


PORTRAIT EXAMPLE:

    XXXXXXXX
    XXXXXXXX
    OOOOOOOO
    OOOOOOOO
    OOOOOOOO
    OOOOOOOO
    XXXXXXXX
    XXXXXXXX

    XXXXXXXX    
    XXXXXXXX    
    XXXXXXXX    
    XXXXXXXX
如您所见,它从图像中心拉出一个正方形用作缩略图。从理论上讲,获取图像的高度/宽度,然后根据我的固定宽度/高度计算偏移量以获得缩略图似乎很简单。但我似乎想不出一种编码的方法:/


另外,在拉出中心正方形之前,我将如何调整图像的大小?因此,缩略图包含的是原始图像的详细信息,而不是一些放大的图形?

如果我提供的是间接的答案,我很抱歉。但您可以尝试使用此库:。它很容易使用。它支持GD,并具有名为的函数,该函数从中心调整图像的大小

以下是文档中用于自适应调整大小的示例代码:

<?php

require_once 'path/to/ThumbLib.inc.php';

try
{
     $thumb = PhpThumbFactory::create('/path/to/image.jpg');
}
catch (Exception $e)
{
     // handle error here however you'd like
}

$thumb->adaptiveResize(175, 175);
$thumb->show();

?>

如果我提供的是间接回答,我很抱歉。但您可以尝试使用此库:。它很容易使用。它支持GD,并具有名为的函数,该函数从中心调整图像的大小

以下是文档中用于自适应调整大小的示例代码:

<?php

require_once 'path/to/ThumbLib.inc.php';

try
{
     $thumb = PhpThumbFactory::create('/path/to/image.jpg');
}
catch (Exception $e)
{
     // handle error here however you'd like
}

$thumb->adaptiveResize(175, 175);
$thumb->show();

?>

如果没有明确明确的目标,就很难尝试提供合适的解决方案。此外,如果您至少尝试一下解决方案,您会发现其他堆垛机更有用

话虽如此,我在网上找到了一些教程,这些教程至少可以给你一个开始的想法——试一试,如果你仍然有问题,请随时发布进一步的问题(包括代码示例和不正常行为的细节)


如果没有明确明确的目标,就很难尝试提供合适的解决方案。此外,如果您至少尝试一下解决方案,您会发现其他堆垛机更有用

话虽如此,我在网上找到了一些教程,这些教程至少可以给你一个开始的想法——试一试,如果你仍然有问题,请随时发布进一步的问题(包括代码示例和不正常行为的细节)


这就是您想要的:

该脚本可用于创建纵向/横向图像的方形缩略图。解决方案需要两个步骤:

1:按比例调整图像大小,使其中一个尺寸与所需尺寸匹配,而另一个尺寸等于或大于所需尺寸

  • 示例1:要将1024x768px图像(ar=1.33)裁剪为200x200px,必须按比例将图像大小调整为266x200px(ar=1.33)
  • 示例2:要将600x900px图像(ar=0.66)裁剪为200x200px,必须按比例将图像大小调整为200x300px(ar=0.66)
2:从图像中间裁剪;数学很简单

  • 示例1:要从266x200px图像中提取200x200px部分,请从33,0中裁剪
  • 示例2:要从200x300px图像中提取200x200px部分,请从0,50进行裁剪


这就是您想要的:

该脚本可用于创建纵向/横向图像的方形缩略图。解决方案需要两个步骤:

1:按比例调整图像大小,使其中一个尺寸与所需尺寸匹配,而另一个尺寸等于或大于所需尺寸

  • 示例1:要将1024x768px图像(ar=1.33)裁剪为200x200px,必须按比例将图像大小调整为266x200px(ar=1.33)
  • 示例2:要将600x900px图像(ar=0.66)裁剪为200x200px,必须按比例将图像大小调整为200x300px(ar=0.66)
2:从图像中间裁剪;数学很简单

  • 示例1:要从266x200px图像中提取200x200px部分,请从33,0中裁剪
  • 示例2:要从200x300px图像中提取200x200px部分,请从0,50进行裁剪

这个怎么样: 它可以拍摄任意大小的图像,并按比例向下(或向上)调整大小,以填充任意尺寸的画布

例如。 源图像为:400w x 600h,缩略图大小需要为100w x 225h-输出图像为100w x 225h,图像垂直居中,宽度为100(最大值),高度为150(上下边框为37.5像素)

下面是函数

function resize_to_canvas($filename,$canvas_w=100,$canvas_h=225){
list($width, $height, $type) = getimagesize($filename);

$original_overcanvas_w = $width/$canvas_w;
$original_overcanvas_h = $height/$canvas_h;

$dst_w = round($width/max($original_overcanvas_w,$original_overcanvas_h),0);
$dst_h = round($height/max($original_overcanvas_w,$original_overcanvas_h),0);

$dst_image = imagecreatetruecolor($canvas_w, $canvas_h);
$background = imagecolorallocate($dst_image, 255, 255, 255);
imagefill($dst_image, 0, 0, $background);

$src_image = imagecreatefromjpeg($filename);
imagecopyresampled($dst_image, $src_image, ($canvas_w-$dst_w)/2, ($canvas_h-$dst_h)/2, 0, 0, $dst_w, $dst_h, $width, $height);
imagegif($dst_image, $filename);
imagedestroy($dst_image);}
此函数将替换原始文件,但很容易修改以创建新的缩略图。只需将文件名更改为imagegif($dst_image,$filename)

这个怎么样: 它可以拍摄任意大小的图像,并按比例向下(或向上)调整大小,以填充任意尺寸的画布

例如。 源图像为:400w x 600h,缩略图大小需要为100w x 225h-输出图像为100w x 225h,图像垂直居中,宽度为100(最大值),高度为150(上下边框为37.5像素)

下面是函数

function resize_to_canvas($filename,$canvas_w=100,$canvas_h=225){
list($width, $height, $type) = getimagesize($filename);

$original_overcanvas_w = $width/$canvas_w;
$original_overcanvas_h = $height/$canvas_h;

$dst_w = round($width/max($original_overcanvas_w,$original_overcanvas_h),0);
$dst_h = round($height/max($original_overcanvas_w,$original_overcanvas_h),0);

$dst_image = imagecreatetruecolor($canvas_w, $canvas_h);
$background = imagecolorallocate($dst_image, 255, 255, 255);
imagefill($dst_image, 0, 0, $background);

$src_image = imagecreatefromjpeg($filename);
imagecopyresampled($dst_image, $src_image, ($canvas_w-$dst_w)/2, ($canvas_h-$dst_h)/2, 0, 0, $dst_w, $dst_h, $width, $height);
imagegif($dst_image, $filename);
imagedestroy($dst_image);}

此函数将替换原始文件,但很容易修改以创建新的缩略图。只需将文件名更改为imagegif($dst_image,$filename)

为什么要裁剪图像?为什么不使用CSS制作固定大小的背景,并保留图像比例?我想你会从中得到一些有趣的图片:)至于调整大小-为什么不尝试搜索呢?你的标题说尝试生成按比例裁剪的缩略图。但后来你说会拉出一个正方形因此,这是不成比例的。您到底想要实现什么?为什么要裁剪图像?为什么不使用CSS制作固定大小的背景,并保留图像比例?我想你会得到的