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

我正在使用imag库为图像创建缩略图.就这么简单.

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

该库提供两种模式:插入和出站.在插入模式下,图像调整大小但不填充缩略图大小.所以我需要填充它来填充目标大小.有没有一种简单的方法来使用库函数

解决方法:

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

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

要遵循的步骤:

>使用getSize()获取原始图像的尺寸
>通过比较宽度和高度来检测图像的方向.
>然后找到您需要适合新缩略图而不“缩放”的确切裁剪点:

>如果是横向,请使用目标框的宽度查找目标宽度
>否则使用高度.

>使用THUMBNAIL_OUTBOUND调整图像大小并创建“小大缩略图”.
>使用您之前找到的裁剪点裁剪已调整大小的图像.
>返回图像实例.

代码

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
}

相关文章

统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...
前言 之前做了微信登录,所以总结一下微信授权登录并获取用户...
FastAdmin是我第一个接触的后台管理系统框架。FastAdmin是一...
之前公司需要一个内部的通讯软件,就叫我做一个。通讯软件嘛...
统一支付是JSAPI/NATIVE/APP各种支付场景下生成支付订单,返...