Encontrar la primera imagen con PHP



Cuando trabajamos con bases de datos o archivos json, éstos vienen con código html y a veces es necesario obtener solamente la primera imagen.

Esta función retornaImagen() me ha servido en muchas ocasiones para extraer la imagen de un texto enriquecido con html.

La función recibe dos datos:

  1. La variable con todo el código html.
  2. Una URL de una imagen alternativa

La función devolverá la URL de la primera imagen encontrada (jpg, png, gif o jpeg), caso contrario devolverá la url de la imagen alternativa.

Si falla la búsqueda de la imagen, por ejemplo debido a que el scr contiene una imagen de tipo base64, el cual es un código muy largo, la función también devolverá la imagen alternativa. 



function retornaImagen($texto, $foto) {
    $texto = html_entity_decode($texto);
    $inicio = strpos($texto, 'src="');
    $fin = 0;

    if ((int) strpos($texto, '.jpg') != 0) {
      $finImagen['jpg'] =  (int) strpos($texto, '.jpg');
    }

    if ((int) strpos($texto, '.png') != 0) {
      $finImagen['png'] =  (int) strpos($texto, '.png');
    }

    if ((int) strpos($texto, '.JPG') != 0) {
      $finImagen['JPG'] =  (int) strpos($texto, '.JPG');
    }

    if ((int) strpos($texto, '.PNG') != 0) {
      $finImagen['PNG'] =  (int) strpos($texto, '.PNG');
    }

    if ((int) strpos($texto, '.jpeg') != 0) {
      $finImagen['jpeg'] =  (int) strpos($texto, '.jpeg');
    }

    if ((int) strpos($texto, '.JPEG') != 0) {
      $finImagen['JPEG'] =  (int) strpos($texto, '.JPEG');
    }

    if ((int) strpos($texto, '.GIF') != 0) {
      $finImagen['GIF'] =  (int) strpos($texto, '.GIF');
    }

    if ((int) strpos($texto, '.gif') != 0) {
      $finImagen['gif'] =  (int) strpos($texto, '.gif');
    }
   
$valorBajo = array_values($finImagen);

$fila = array_search(min($valorBajo), $finImagen); 

  if ($fila == 'jpeg' OR $fila == 'JPEG') {
    $digitoResta = 0;
  } else {$digitoResta = 1;}

$fin = $finImagen[$fila]; 

    if ($inicio != FALSE) {

        $salida = rawurldecode(substr($texto, $inicio + 5, $fin - $inicio - $digitoResta));

            if (strlen($salida) < 256) {
              return $salida;
            } else { return $foto; }

    } else {
        return $foto;
    }
    
}


¿Cómo usarla?

Es sencillo, primero asegúrate de asignar una url de la imagen alternativa a la variable $foto con esto ya podrás trabajar, luego la función la usas con los dos datos que ya tienes. 


$foto = 'https://www.guiaplaza.com/imagenes/juan-gomez-bLBrjMXw-5k-unsplash.jpg';
echo retornaFoto($texto, $foto);

Es sencillo

Comentarios

Entradas populares de este blog

Superponer una imagen sobre otra con CSS

¿Ganas dinero en Facebook con Página, Grupo, Comunidad, etc?

Script para buscar palabras o textos en una página (html) con Jquery