gpt4 book ai didi

php - 如何用想象库填充缩略图

转载 作者:可可西里 更新时间:2023-11-01 00:21:49 26 4
gpt4 key购买 nike

我正在使用想象库为图像创建缩略图。就这么简单。

$size = new \Imagine\Image\Box(240, 180);
$imagine->open($source_path)->thumbnail($size, 'inset')->save($target_path);

图书馆提供两种模式:插入和出站。在插入模式下,图像会缩小,但不会填满缩略图大小。所以我需要填充它来填充目标大小。有没有使用库函数的简单方法来做到这一点?

最佳答案

如果您不想“缩放”缩略图以适应,则必须裁剪图像。对于裁剪,您必须找到确切的起点,这需要一点努力。

编写一个自定义方法来找到准确的裁剪点、调整大小并返回新图像是个好主意。 Imagine 是一个非常好的库,它提供了我们需要的所有方法。

要遵循的步骤:

  1. 使用 getSize() 获取原始图像的尺寸
  2. 通过比较宽度和高度来检测图像的方向。
  3. 然后在不“缩放”的情况下按方向找到适合新缩略图的确切裁剪点:
    • 如果是横向,使用目标框的宽度找到目标宽度
    • 否则使用高度。
  4. 使用 THUMBNAIL_OUTBOUND 调整图像大小并创建“小而大的缩略图”。
  5. 使用您之前找到的裁剪点裁剪调整大小的图像。
  6. 返回图像实例。

伪代码:

function resizeToFit( $targetWidth, $targetHeight, $sourceFilename )
{
// Box is Imagine Box instance
// Point is Imagine Point instance
$target = new Box($targetWidth, $targetHeight );
$originalImage = imagine->open( $sourceFilename );
$orgSize = $originalImage->getSize();
if ($orgSize->width > $orgSize->height) {
// Landscaped.. We need to crop image by horizontally
$w = $orgSize->width * ( $target->height / $orgSize->height );
$h = $target->height;
$cropBy = new Point( ( max ( $w - $target->width, 0 ) ) / 2, 0);
} else {
// Portrait..
$w = $target->width; // Use target box's width and crop vertically
$h = $orgSize->height * ( $target->width / $orgSize->width );
$cropBy = new Point( 0, ( max( $h - $target->height , 0 ) ) / 2);
}

$tempBox = Box($w, $h);
$img = $originalImage->thumbnail($tempBox, ImageInterface::THUMBNAIL_OUTBOUND);
// Here is the magic..
return $img->crop($cropBy, $target); // Return "ready to save" final image instance
}

关于php - 如何用想象库填充缩略图,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18844252/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com