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_image, 0, 0, 0, 0, $imgW, $imgH, $imgInitW, $imgInitH);
    
    
// Rotar la imagen
    
$rotated_image = imagerotate($resizedImage, -$angle, 0);
    
// 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_image, imagecolorallocate($cropped_rotated_image, 0, 0, 0));
    
imagecopyresampled($cropped_rotated_image, $rotated_image, 0, 0, $dx / 2, $dy / 2, $imgW, $imgH, $imgW, $imgH);
    
// crop de la imagen en el area seleccionada
    
$final_image = imagecreatetruecolor($cropW, $cropH);
    
imagecolortransparent($final_image, imagecolorallocate($final_image, 0, 0, 0));
    
imagecopyresampled($final_image, $cropped_rotated_image, 0, 0, $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! :)