SPIP-Contrib

SPIP-Contrib

عربي | Deutsch | English | Español | français | italiano

273 Plugins, 191 contribuciones sur SPIP-Zone, 35 visitantes en este momento

Portada del sitio > Administration et BDD > Gestion des documents > Données Exif > Baliza #EXIF: recuperar la información almacenada en las imágenes.

Baliza #EXIF: recuperar la información almacenada en las imágenes.

19 de julio de 2006 – por JavSP

Todas las versiones de este artículo: [English] [Español] [français]

2 votes

En vez de utilizar las balizas por defecto de SPIP para obtener la fecha, la descripción, el título etc. de una imagen JPG, se puede utilizar la información almacenada dentro del fichero gráfico que ha sido creado por las cámaras fotográficas y otros gestores fotográficos.

Objetivo

Con el nuevo compilador, se pueden crear balizas personalizadas. En la lista de los usuarios, hay una demanda para integrar la lectura de los metadatos EXIF en los ficheros jpg. Estos datos permiten obtener información sobre los ficheros jpg (a menudo anotada por las cámaras fotográficas digitales) como la hora de toma de la fotografía, de los comentarios, un copyright, etc.

El código aquí presentado debe colocarse en el fichero mes_fonctions.php3.

php proporciona una función para acceder a estos datos [1]. Se va a comenzar por crear dos pequeños bloques para utilizarlos simplemente en spip:

-  La primera función verifica si un fichero puede contener etiquetas (tags) EXIF (básicamente, si es un fichero de tipo jpg o tiff)
-  El segundo devuelve un campo con los metadatos. Se accede pasando a la función una sección y la etiqueta de lo que interesa en esta sección. Si no se indica sección y etiqueta, entonces la función devuelve una lista de todas etiquetas que existen en el fichero [2].

La baliza

Por ello, se va a declarar una nueva baliza #EXIF que devuelva los metadatos. Comenzaremos por una versión simple de esta baliza:

Esta baliza, al llamar tag_exif sin parámetros sección y tag, va a devolver una lista de todos los tags EXIF existentes.

Sobre todo, debemos recuperar el nombre de fichero gráfico, el documento, que nos interesa. Para esto, se necesita el ID del documento. El parámetro $param nos permite recuperar esta información. SPIP proporciona una función para simplificar la tarea: champ_sql devuelve el código que va a darnos el valor de id_document.

En realidad, champ_sql es un atajo para index_pile:

index_pile devuelve la posición en la pila del campo SQL $nom_champ tomando el bucle lo más cerca posible de la cumbre de la pila (indica por $idb). Si no se encuentra nada, se considera que eso debe proceder del contexto (por la URL o el include) que se volvió a copiar en Pile [0] (una prueba de refinamiento desembocó en un bug vicioso). Si esto hace referencia a un campo SQL, se memoriza en la estructura $boucles con el fin de construir una petición SQL mínima (en lugar de hacer un brutal “SELECT *”)

champ_sql va a usar $param para deducir “el bucle lo más cercano posible”, mientras que el segundo parámetro especifica que se quiere recuperar el campo 'id_document'

El código que se quiere ejecutar para esta baliza no debe lanzado ahora, sino en el caché. Por ello es necesario devolver una cadena que contenga el código que se quiere ejecutar: "(verifier_JPG_TIFF($id_doc))?(tag_exif(generer_url_document($id_doc))):''"

También es necesario especificar a spip que devuelve código php que debe ejecutarse - contrariamente al código HTML en bruto - poniendo: $params->type = 'php';

Pasar los parámetros

Bien, queda claro que esta baliza no es muy interesante. En general, no se necesita toda la información, sino una sola cada vez. En vez de crear un montón de balizas para cada uno de los campos EXIF - que no siempre son fijos -, se va a pasar, como parámetros a la baliza, la sección y la etiqueta EXIF que se quiere recuperar.

Desde la versión 1.8 [3], SPIP proporciona una función simple para recuperar parámetros pasados a una baliza. Esta función se utiliza en el código siguiente, para un método más anticuado (del tipo #EXPOSER|on, off), habrá que inspirarse en el código LOGO explicado más abajo.

Vamos a utilizar el mismo método para pasar los dos parámetros a nuestra baliza EXIF, con lo que entonces se podrá hacer: #EXIF{FILE,FileName} o #EXIF{IFD0,DateTime} por ejemplo.

he aquí el nuevo código:

No hay mucha diferencia en el código devuelto. Por el contrario, se va a recuperar, si se indican, los parámetros $section et $tag para pasarlos a tag_exif.

Se recorre la lista de filtros en params->fonctions para encontrar el que corresponde a los parámetros. A continuación se recupera este filtro de la lista y se extraen los parámetros que corresponde al nombre del filtro.

Una baliza LOGO

En el encabezamiento EXIF de una imagen jpeg, está presente, a menudo, una miniatura de la imagen contenida en el fichero. Esta miniatura es utilizada por las cámaras fotográficas para mostrar rápidamente la fotografía sobre su pantalla. Obviamente, esta miniatura no es de gran calidad, pero es una buena ocasión de ver cómo hacer una baliza LOGO. Además, si no se tiene ni GD, ni imagemagick sobre el servidor, esto se puede ser útil :)

Comenzaremos por dos pequeñas funciones:
-  generer_url_logo_EXIF busca el logo exif - contenido en el fichero nombre_fichero.exif.jpg si ya ha sido creado, si no, extrae la etiqueta para almacenarla en un fichero en el servidor. En los dos casos, devuelve el camino hacia este fichero.
-  generer_html_logo_EXIF genera el código HTML del logo, con un vínculo o no, y una alineación o no.

Veamos ahora cómo hacer para crear un LOGO. El mayor problema es realmente la gestión de los filtros especiales de alineación, etc.

El principio es el mismo que para el código anterior. Se observa la lista de las funciones para ver lo que se encuentra. Se pueden encontrar una indicación de alineación, o un fichero (para indicar la url del fichero), o un vínculo a colocar sobre el logo.

La primera parte del código estudia los filtros contenidos en la tabla $p->fonctions. A continuación, se observa si se tiene que generar código para el vínculo, lo cual tiene un gran interés: se puede pasar como vínculo, otra baliza (por ejemplo: [(#LOGO_EXIF|#URL_DOCUMENT)]).

Se llama entonces a la función calculer_champ, que es la función básica que calcula todas las balizas para SPIP, sobre la potencial baliza.

Un filtro para las fechas

Las fechas almacenadas en las imágenes están bajo un formato diferente al utilizado por SPIP, así que no se pueden utilizar directamente los filtros proporcionados por SPIP. He aquí un filtro que debe aplicarse antes de los filtros de fecha SPIP para que todo vaya bien:

Ejemplo de uso

He aquí un bucle que indica, en una lista, los documentos de un artículo, con una serie de informaciones contenidas en los campos EXIF:

Versión de desarrollo

Esta contribución se administra desde spip-zone, se puede recuperar la última versión de desarrollo gracias a:

svn checkout svn://zone.spip.org/spip-zone/_contrib_/_balises_/exif/trunk/

Notas

[1(en la librería exif.php, o php_exif.dll Nota: verificar que está activa dicha función en php.ini, quitando el comentario «;» en la línea «extensions=php_exif.dll», para el caso de algunos sistemas WAMP)

[2Hay un caché, en memoria, para no releer los datos EXIF más que una vez, la primera, para el caso de que se accedan consecutivamente a datos del mismo documento

[3versión cvs de 17 Dic. 2004

Volver arriba

Comentar este artículo

¿Quién eres?

Pour afficher votre trombine avec votre message, enregistrez-la d'abord sur gravatar.com (gratuit et indolore) et n'oubliez pas d'indiquer votre adresse e-mail ici.

Añade tu comentario aquí Les choses à faire avant de poser une question (Prolégomènes aux rapports de bugs. )
Añadir un documento

Volver arriba

Hablando de eso...

  • (fr) Une licence pour un article

    18 avril 2007 – 25 <blink style='color:red;'>public|spip|ecrire:commentaires</blink>

    Sur une idée originale de erational, voici un plugin permettant de lier une licence à un article.

  • (fr) Plugin Parrainage

    6 novembre 2011 – <blink style='color:red;'>public|spip|ecrire:commentaire</blink>

    Permettre aux utilisateurs d’inviter leurs contacts à s’inscrire sur le site. Description Vous connaissez le web moderne et son cortège d’applis toujours en version « beta » et de buzz sur le dernier réseau à la mode ? Vous voulez vous aussi vous y (...)

  • (fr) Formulaire de contact libre

    27 avril 2011 – 36 <blink style='color:red;'>public|spip|ecrire:commentaires</blink>

    Dans SPIP il n’y a pas un formulaire de contact, mais autant de formulaires de contact que d’auteurs. Cette phrase de Romy, dans son article Une page de contact dans mon SPIP, pointe un petit manque de SPIP. La possibilité d’insérer rapidement un (...)

  • (fr) Plugin Mot de Passe Compliqué

    2 novembre 2007 – 16 <blink style='color:red;'>public|spip|ecrire:commentaires</blink>

    Ce plugin ajoute un testeur de complexité de mot de passes dans les formulaires de choix de mot de passe de SPIP.

  • (fr) Navigation AJAX

    31 janvier – 18 <blink style='color:red;'>public|spip|ecrire:commentaires</blink>

    Ce plugin permet de modifier automatiquement une parties des liens internes de manière à ce qu’ils ne déclenchent pas un chargement complet de la page cible, mais un chargement en AJAX de certains éléments spécifiés à l’avance. Il permet aussi de (...)