PHP - Problema de transparencia al cargar archivo PNG

 
Vista:
sin imagen de perfil
Val: 6
Ha aumentado su posición en 25 puestos en PHP (en relación al último mes)
Gráfica de PHP

Problema de transparencia al cargar archivo PNG

Publicado por Julian Costa (4 intervenciones) el 24/08/2018 01:41:32
Buenas a todos!
El problema que tengo es que cuando cargo una imagen .PNG con php a mysql pierde transparencia y aparece el fondo negro. Espero ayuda muchas gracias!!
Aquí les dejo el código:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
$info = new SplFileInfo($_FILES['image']['name']);
$extension = pathinfo($info->getFilename(), PATHINFO_EXTENSION);
if($extension == "png"){
 
if (isset($_FILES['image']) && $_FILES['image']['tmp_name']!=''){
$rtOriginal=$_FILES['image']['tmp_name'];
$original = imagecreatefrompng($rtOriginal);
$max_ancho = 600; $max_alto = 400;
list($ancho,$alto)=getimagesize($rtOriginal);
$x_ratio = $max_ancho / $ancho;
$y_ratio = $max_alto / $alto;
if(($ancho <= $max_ancho) && ($alto <= $max_alto) ){
    $ancho_final = $ancho;
    $alto_final = $alto;
}
else if(($x_ratio * $alto) < $max_alto){
    $alto_final = ceil($x_ratio * $alto);
    $ancho_final = $max_ancho;
}
else {
    $ancho_final = ceil($y_ratio * $ancho);
    $alto_final = $max_alto;
}
$lienzo=imagecreatetruecolor($ancho_final,$alto_final);
imagecopyresampled($lienzo,$original,0,0,0,0,$ancho_final, $alto_final,$ancho,$alto);
imagedestroy($original);
imagepng($lienzo,"../images/".$_FILES['image']['name']);
$rutaDestino="../images/".$_FILES['image']['name'];
move_uploaded_file($lienzo,$rutaDestino);
}
 
}elseif ($extension == "jpg") {
if (isset($_FILES['image']) && $_FILES['image']['tmp_name']!=''){
$rtOriginal=$_FILES['image']['tmp_name'];
$original = imagecreatefromjpeg($rtOriginal);
$max_ancho = 600; $max_alto = 400;
list($ancho,$alto)=getimagesize($rtOriginal);
$x_ratio = $max_ancho / $ancho;
$y_ratio = $max_alto / $alto;
if(($ancho <= $max_ancho) && ($alto <= $max_alto) ){
    $ancho_final = $ancho;
    $alto_final = $alto;
}
else if(($x_ratio * $alto) < $max_alto){
    $alto_final = ceil($x_ratio * $alto);
    $ancho_final = $max_ancho;
}
else {
    $ancho_final = ceil($y_ratio * $ancho);
    $alto_final = $max_alto;
}
$lienzo=imagecreatetruecolor($ancho_final,$alto_final);
imagecopyresampled($lienzo,$original,0,0,0,0,$ancho_final, $alto_final,$ancho,$alto);
imagedestroy($original);
imagejpeg($lienzo,"../images/".$_FILES['image']['name']);
$rutaDestino="../images/".$_FILES['image']['name'];
move_uploaded_file($lienzo,$rutaDestino);
}
}
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 6
Ha aumentado su posición en 25 puestos en PHP (en relación al último mes)
Gráfica de PHP

Problema de transparencia al cargar archivo PNG

Publicado por Julian Costa (4 intervenciones) el 24/08/2018 18:15:38
En la primera parte del codigo utilice imagecreatefrompng, con un if, para validar el campo y en la segunda parte use imagecreatefromjpeg por si sube una jpg
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar
Imágen de perfil de Alejandro
Val: 1.634
Plata
Ha mantenido su posición en PHP (en relación al último mes)
Gráfica de PHP

Problema de transparencia al cargar archivo PNG

Publicado por Alejandro (855 intervenciones) el 25/08/2018 16:15:12
  • Alejandro se encuentra ahora conectado en el
  • chat de PHP
No lo inspeccione bien, eso me sucede cuando están mal indentados, la pereza me gana :P
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
$info = new SplFileInfo($_FILES['image']['name']);
$extension = pathinfo($info->getFilename(), PATHINFO_EXTENSION);
if($extension == "png"){
	if (isset($_FILES['image']) && $_FILES['image']['tmp_name']!=''){
		$rtOriginal=$_FILES['image']['tmp_name'];
		$original = imagecreatefrompng($rtOriginal);
		$max_ancho = 600; $max_alto = 400;
		list($ancho,$alto)=getimagesize($rtOriginal);
		$x_ratio = $max_ancho / $ancho;
		$y_ratio = $max_alto / $alto;
		if(($ancho <= $max_ancho) && ($alto <= $max_alto) ){
			$ancho_final = $ancho;
			$alto_final = $alto;
		}else if(($x_ratio * $alto) < $max_alto){
			$alto_final = ceil($x_ratio * $alto);
			$ancho_final = $max_ancho;
		}else {
			$ancho_final = ceil($y_ratio * $ancho);
			$alto_final = $max_alto;
		}
 
		$lienzo=imagecreatetruecolor($ancho_final,$alto_final);
		imagecopyresampled($lienzo,$original,0,0,0,0,$ancho_final, $alto_final,$ancho,$alto);
		imagedestroy($original);
		imagepng($lienzo,"../images/".$_FILES['image']['name']);
		$rutaDestino="../images/".$_FILES['image']['name'];
		move_uploaded_file($lienzo,$rutaDestino);
	}
}else if ($extension == "jpg") {
	if (isset($_FILES['image']) && $_FILES['image']['tmp_name']!=''){
		$rtOriginal=$_FILES['image']['tmp_name'];
		$original = imagecreatefromjpeg($rtOriginal);
		$max_ancho = 600; $max_alto = 400;
		list($ancho,$alto)=getimagesize($rtOriginal);
		$x_ratio = $max_ancho / $ancho;
		$y_ratio = $max_alto / $alto;
		if(($ancho <= $max_ancho) && ($alto <= $max_alto) ){
			$ancho_final = $ancho;
			$alto_final = $alto;
		}else if(($x_ratio * $alto) < $max_alto){
			$alto_final = ceil($x_ratio * $alto);
			$ancho_final = $max_ancho;
		}else {
			$ancho_final = ceil($y_ratio * $ancho);
			$alto_final = $max_alto;
		}
 
		$lienzo=imagecreatetruecolor($ancho_final,$alto_final);
		imagecopyresampled($lienzo,$original,0,0,0,0,$ancho_final, $alto_final,$ancho,$alto);
		imagedestroy($original);
		imagejpeg($lienzo,"../images/".$_FILES['image']['name']);
		$rutaDestino="../images/".$_FILES['image']['name'];
		move_uploaded_file($lienzo,$rutaDestino);
	}
}

Estas duplicando cogido, eso esta mal.
Entiendo que quieres re-dimensionar una imagen pero estas creando una imagen (lienzo) en la cual pegas encima la imagen original y me parece que ese es el problema. Intenta imagecopyresized para hacer directamente una copia de la imagen con el tamaño deseado.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar