Ver Mensaje Individual
  #1 (permalink)  
Antiguo 29/12/2015, 17:04
sidneyendis
Invitado
 
Mensajes: n/a
Puntos:
Sonrisa Fondo transparente con halo negro en imagen PNG

Buena snoches compañeros!
Tengo un pequeño problema, estoy creando un sistema que procese las imagenes enviadas de un formulario y las suba. Si las imagenes PNG tienen transparencias las quiero conservar, y de hecho lo consigo pero a medias, me explico, la imagen es trasparenete pero alrededor d ela parte no transparente se crea un halo/linea negro muy extraño y que por más que prueba cosas, no doy con la solución.
Este es el código:
Código PHP:
$what getimagesize($imgUrl);

switch(
strtolower($what['mime']))
{
    case 
'image/png':
        
$img_r imagecreatefrompng($imgUrl);
        
$source_image imagecreatefrompng($imgUrl);
        
$type '.png';
        break;
    case 
'image/jpeg':
        
$img_r imagecreatefromjpeg($imgUrl);
        
$source_image imagecreatefromjpeg($imgUrl);
        
error_log("jpg");
        
$type '.jpeg';
        break;
    case 
'image/gif':
        
$img_r imagecreatefromgif($imgUrl);
        
$source_image imagecreatefromgif($imgUrl);
        
$type '.gif';
        break;
    default: die(
'Tipo de imagen no soportada');
}

//Comprobando escritura de acceso al directorio
if(!is_writable(dirname($output_filename))){
    
$response = Array(
        
"status" => 'error',
        
"message" => 'No se puede recortar el archivo'
    
);    
}else{
    
// Cambiar el tamaño original por el tamaño del editor
    
$resizedImage imagecreatetruecolor($imgW$imgH);
    
imagecopyresampled($resizedImage$source_image0000$imgW$imgH$imgInitW$imgInitH);
    
    
// Rotar la imagen
    
$rotated_image imagerotate($resizedImage, -$angle0);
    
// Nueva anchura y altura de la imagen rotada
    
$rotated_width imagesx($rotated_image);
    
$rotated_height imagesy($rotated_image);
    
// diferencia entre los tamaños rotados y los originales
    
$dx $rotated_width $imgW;
    
$dy $rotated_height $imgH;
    
// crop de la iamgen rotada para encajar el rectangulo
    
$cropped_rotated_image imagecreatetruecolor($imgW$imgH);
    
imagecolortransparent($cropped_rotated_imageimagecolorallocate($cropped_rotated_image000));
    
imagecopyresampled($cropped_rotated_image$rotated_image00$dx 2$dy 2$imgW$imgH$imgW$imgH);
    
// crop de la imagen en el area seleccionada
    
$final_image imagecreatetruecolor($cropW$cropH);
    
imagecolortransparent($final_imageimagecolorallocate($final_image000));
    
imagecopyresampled($final_image$cropped_rotated_image00$imgX1$imgY1$cropW$cropH$cropW$cropH);
    
// Salida final imagen png
    
imagepng($final_image$output_filename.$type$png_quality);
    
//imagejpeg($final_image, $output_filename.$type, $jpeg_quality);
    
$response = Array(
        
"status" => 'success',
        
"url" => $output_filename.$type
    
);

Agradecería cualquier posible ayuda.
Saludos! :)