remove - Usando PHP Imagine aplicar una máscara
strip_tags() (1)
Tengo lo siguiente:
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;
}
}
Guarda las imágenes como se esperaba, pero no aplica la máscara a la miniatura.
¿Dónde me estoy equivocando (estoy usando Laravel 5)?
Además, cuando se ejecuta el script, toma literalmente alrededor de 1 minuto para completarse, por lo que está haciendo algo, pero las imágenes se siguen emitiendo sin máscara aplicada.
Al final, creo que voy a utilizar estos chicos https://www.imgix.com/
Actualización 2015-08-04 11:32 +0000
Resulta que la transparencia blanca es la lógica de enmascaramiento elegida en Imagine.
https://github.com/avalanche123/Imagine/pull/449#issuecomment-127516157
Original
Es muy probable que sea un error en la biblioteca de Imagine. Encontré lo siguiente:
No pude hacer que GD / Image :: applyMask () funcionara como se describe en el ejemplo de Reflection en http://www.slideshare.net/avalanche123/introduction-toimagine, así que hice algunas correcciones.
- Todavía es compatible solo con la paleta RGB para máscara, pero ahora las cuentas son promedio entre colores.
- Cambia la imagen si su transparencia es menor a 0.5.
Desde https://github.com/avalanche123/Imagine/pull/449
La corrección asociada aún no confirmada:
https://github.com/kasuparu/Imagine/commit/66a36652c76f9b5ff640f465d8f970c563841ae6
Probé el código fijo y parece funcionar, excepto que la máscara está (desde mi perspectiva) aplicada hacia atrás, manteniendo las partes negras y descartando las partes blancas. Comenté este problema en la solicitud de extracción.
Como referencia, esta es la solución en acción:
Usando $ blackAmount:
Y mi solución de la corrección, usando $ whiteAmount: