WideImage: las áreas transparentes de PNG convertido deben ser blancas

Cada vez que un usuario sube una foto con mi script, WideImage la convierte a JPEG. Sin embargo, me di cuenta de que si cargaba una imagen PNG, con un fondo transparente, en cambio, se veía negra.

¿Hay alguna manera de hacer esto blanco en su lugar?

Así es como guardo la imagen:

$img->resizeDown('500', null)->saveToFile('annonce_billeder/'.$bnavn.'.jpeg', 70); 

Solutions Collecting From Web of "WideImage: las áreas transparentes de PNG convertido deben ser blancas"

No realmente directamente. No debe leer acerca de cómo se almacena la transparencia en las imágenes: es un valor de color ordinario (cualquier color) que se ha marcado especialmente como transparente.

Por lo tanto, lo más probable es que el color especificado en las imágenes de ejemplo que intenta en realidad esté codificado como negro y la transparencia se pierda durante la conversión.

Puede tratar de averiguar si puede detectar si hay un color marcado como transparente en la imagen entrante y luego cambiar manualmente ese color a no transparente y blanco antes de convertir la imagen.

Puede ser similar, pero pude crear una imagen vacía de color verdadero y llenarla con su propio color transparente antes de hacer cualquier dibujo:

 $img = WideImage_TrueColorImage::create(100, 100); $img->fill(0,0,$img->getTransparentColor()); // then text, watermark, etc $img->save('...'); 

Supongo que harás algo más como:

 $img = WideImage::load(); if( < $img is png> ) { $img->fill(0,0, $img->getTransparentColor()); } $img->resizeDown(500, null)->saveToFile('target.jpg', 70); 

Asi es como se hace:

 // Load the original image $original = WideImage::load("image.png"); $original->resizeDown(1000); // Do whatever resize or crop you need to do // Create an empty canvas with the original image sizes $img = WideImage::createTrueColorImage($resized->getWidth(),$resized->getHeight()); $bg = $img->allocateColor(255,255,255); $img->fill(0,0,$bg); // Finally merge and do whatever you need... $img->merge($original)->saveToFile("image.jpg"); 

Con algunos cambios (correcciones) en el código de solución de Ricardo Gamba, hace el trabajo …

 // Load the original image $original = WideImage::load("image.png"); $resized = $original->resizeDown('500', null); // Do whatever resize or crop you need to do $original->destroy(); // free some memory (original image not needed any more) // Create an empty canvas with the resized image sizes $img = WideImage::createTrueColorImage($resized->getWidth(), $resized->getHeight()); $bg = $img->allocateColor(255,255,255); $img->fill(0,0,$bg); // Finally merge and do whatever you need... $img->merge($resized)->saveToFile("image.jpg", 70);