使用PHP Imagine应用掩码

时间:2015-07-26 10:49:07

标签: php laravel laravel-5 php-imagine

我有以下内容:

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use Imagine\Image\Box;
use Imagine\Image\ImageInterface;
use Imagine;

class UploadController extends Controller {

    public function processImage($request) {
        $file = $request->file('file');

        $path = '/images';
        $fileName = 'image.png';

        if ($file) {
            $file->move('../public' . $path, $fileName);
            $gThumb = $this->createThumbnail(219, 300, '../public/images', 'image', 'png', 'thumb', true);
            $pThumb = $this->createThumbnail(300, 300, '../public/images', 'image', 'png', 'pthumb');
            return response()->json([
                'gallery_thumbnail' => $path . '/' . $gThumb,
                'upload_thumbnail' => $path . '/' . $pThumb
            ]);
        }
    }

    function createThumbnail($height, $width, $path, $filename, $extension, $postfix = null, $mask = null)
    {
        $mode = ImageInterface::THUMBNAIL_OUTBOUND;
        $size = new Box($width, $height);
        $postfix = $postfix ? $postfix : 'thumb';


        $thumbnail = Imagine::open("{$path}/{$filename}.{$extension}")->thumbnail($size, $mode);
        if ($mask) {
            $mask = Imagine::open('../public/images/masks/bubble-splash.png');
            $thumbnail->applyMask($mask);
        }
        $destination = "{$filename}" . "." . $postfix . "." . "{$extension}";

        $thumbnail->save("{$path}/{$destination}");
        return $destination;
    }
}

它按预期保存图像,但不会将蒙版应用于缩略图。

我哪里出错(我使用的是Laravel 5)?

此外,当脚本运行时,它需要花费大约1分钟来完成,所以它做了一些事情,但图像仍然输出而没有应用蒙版。

最后我想我会使用这些家伙https://www.imgix.com/

1 个答案:

答案 0 :(得分:4)

更新2015-08-04 11:32 +0000

结果显示白色透明度是Imagine中选择的屏蔽逻辑 https://github.com/avalanche123/Imagine/pull/449#issuecomment-127516157

原始

这很可能是Imagine库中的一个错误。我找到了以下内容:

  

我无法使GD \ Image :: applyMask()工作,如http://www.slideshare.net/avalanche123/introduction-toimagine中的反射示例所述,所以我做了一些修复。

     
      
  1. 它仍然仅支持蒙版的RGB调色板,但现在在颜色之间进行平均。
  2.   
  3. 如果图像的透明度小于0.5,则会更改图像。
  4.   

来自https://github.com/avalanche123/Imagine/pull/449

尚未提交相关修订:
https://github.com/kasuparu/Imagine/commit/66a36652c76f9b5ff640f465d8f970c563841ae6

我尝试了固定代码,它似乎工作,除了掩码是(从我的角度来看)向后施加,保持黑色部分并丢弃白色部分。我在拉取请求中对此问题进行了评论。

作为参考,这是行动中的修复:

使用$ blackAmount: php-imagine-applymask-using-blackamount-20150731-1831-gmt

我使用$ whiteAmount解决了修复问题: php-imagine-applymask-using-whiteamount-20150731-1831-gmt