laravel — Использование 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/

15

Решение

Обновление 2015-08-04 11:32 +0000

Оказывается, прозрачность белого цвета — это выбранная логика маскирования в Imagine.
https://github.com/avalanche123/Imagine/pull/449#issuecomment-127516157

оригинал

Скорее всего, это ошибка в библиотеке Imagine. Я нашел следующее:

Я не мог заставить GD \ Image :: applyMask () работать, как описано в примере Reflection в http://www.slideshare.net/avalanche123/introduction-toimagine поэтому я сделал некоторые исправления.

  1. Он по-прежнему поддерживает только палитру RGB для маски, но теперь учитывает среднее между цветами.
  2. Это действительно меняет изображение, если его прозрачность меньше 0,5.

От https://github.com/avalanche123/Imagine/pull/449

Связанное исправление еще не совершено:
https://github.com/kasuparu/Imagine/commit/66a36652c76f9b5ff640f465d8f970c563841ae6

Я попробовал фиксированный код, и он, кажется, работает, за исключением того, что маска (с моей точки зрения) применяется в обратном направлении, сохраняя черные части и отбрасывая белые части. Я прокомментировал эту проблему в запросе на удаление.

Для справки, это исправление в действии:

Использование $ blackAmount:
PHP-представьте-applymask-используя-blackamount-20150731-1831-GMT

И мое исправление, используя $ whiteAmount:
PHP-представьте-applymask-используя-whiteamount-20150731-1831-GMT

4

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]