Foro de elhacker.net

Programación => Programación General => Mensaje iniciado por: daigodark en 20 Julio 2015, 01:58 am



Título: Decodificar imagen base 64
Publicado por: daigodark en 20 Julio 2015, 01:58 am
Buenas noches, escribo para preguntar lo siguiente:

¿Como hago para decodificar una imagen que esta en mi base de datos en base 64, ya que tengo un código reciclado ("modifciado") de Internet pero me lanza este erro?
Notice: Undefined offset: 1 in D:\Documentos\Mis Documentos\Inscripcion\sacarimagen.php on line 21

la linea numero 21 tiene esto:

list(, $Base64Img) = explode('=', $Base64Img);

Si lo quito no da error pero no carga la imagen.

Aquí les dejo el código completo espero puedan ayudarme y de antemano gracias.
Código
  1. <?php
  2.  
  3. # Buscamos la imagen a mostrar
  4. $bd= new SQLite3('Asistencia.db');
  5. $s= $bd->query("SELECT * FROM imagen WHERE id='1';");
  6. while($row=$s->FetchArray()){
  7. if($row['ID']){
  8. # Mostramos la imagen
  9. $Base64Img=$row['Foto'];
  10.  
  11. echo"
  12.  
  13. ".$Base64Img;}};
  14.  
  15.  
  16.  
  17. //eliminamos data:image/png; y base64, de la cadena que tenemos
  18. //hay otras formas de hacerlo  
  19. list(, $Base64Img) = explode('/', $Base64Img);
  20. list(, $Base64Img) = explode('+', $Base64Img);
  21. list(, $Base64Img) = explode('=', $Base64Img);
  22.  
  23.  
  24.  
  25. //Decodificamos $Base64Img codificada en base64.
  26. $Base64Img = base64_decode($Base64Img);
  27. //escribimos la información obtenida en un archivo llamado
  28. //unodepiera.png para que se cree la imagen correctamente
  29. file_put_contents('unodepiera.jpg', $Base64Img);
  30. echo "<img src='unodepiera.jpg' alt='unodepiera' />";
  31. ?>
  32.  

[MOD] Usa las etiquetas GeSHi, para postear codigo.


Título: Re: Decodificar imagen base 64
Publicado por: engel lex en 20 Julio 2015, 06:05 am
la cosa es que las imagenes en base 64 como aparentemente las tienes que tener guardadas (según el comenrio) es "data:image/png;base64,...."

y las lineas 19 a 21
Código
  1. list(, $Base64Img) = explode('/', $Base64Img);
  2. list(, $Base64Img) = explode('+', $Base64Img);
  3. list(, $Base64Img) = explode('=', $Base64Img);

lo que hacen es, agarrar lo que está en la db y si hay "/" separa el codigo por eso y agarra solo lo que está de segundo... igual para el "+" y el "="... sin embargo no entiendo para que hace eso, en tal caso esas 3 lineas deberían ser solo

list(, $Base64Img) = explode(',', $Base64Img);

has el cambio y dime como te fue el reultado


Título: Re: Decodificar imagen base 64
Publicado por: daigodark en 20 Julio 2015, 18:49 pm
Coloque solo el:

list(, $Base64Img) = explode(',', $Base64Img);


Y me siguio dando el mismo error


Título: Re: Decodificar imagen base 64
Publicado por: MinusFour en 20 Julio 2015, 19:07 pm
Una mejor pregunta sería porque estas almacenando ese string en tu base de datos, que por cierto no sabemos el contenido del string. Solo sabemos que encima de un string (del cual no sabemos nada) tienes tu información de la imagen en base64. Que por cierto + y / son caracteres validos para base64 y lo que estas haciendo puede cortar información de la imagen.


Título: Re: Decodificar imagen base 64
Publicado por: daigodark en 20 Julio 2015, 19:20 pm
Como por lo visto no leiste todo o no lo quisiste entender el codigo es reciclado trate de entenderlo y solo me salia el error, entre para consultar  el por que no para que me digan que mis preguntas no son serias, ya resolvi el problema Gracias Engel Lex