Escribir con UTF-8 en etiquetas IPTC

iptc utf8

Tenía que escribir en imágenes la información IPTC y resulta que no se veían los acentos y otros caracteres porque sepa cual es la codificación natural para las etiquetas, pero se puede solucionar añadiéndolas con charset UTF-8. Aquí dejo un código de ejemplo:

<?php 

/*

* @toro escribir etiquetas IPTC en imagen, charset UTF-8

*/

$imagen = "test.jpg";

$nueva = "nueva.jpg";

$iptc = [

'2#005' => 'Limón', //DocumentTitle

'2#120' => 'Un ñandú se bañaba en las orillas del río Éufrates.', //Caption

'2#116' => '@toro', //Copyright

];

//

$data = chr(0x1b).chr(0x25).chr(0x47);

$data = chr(0x1C).chr(1).chr('090').chr(strlen($data)>>8).chr(strlen($data)&0xFF).$data;

foreach($iptc AS $k=>$v) { $e = substr($k,2); $data .= iptc_make_tag(2, $e, $v); }

copy($imagen,$nueva); //copiamos la imagen a la nueva

$contenido = iptcembed($data, $nueva);

$fp = fopen($nueva, "wb");

fwrite($fp, $contenido);

fclose($fp);

unset($contenido,$data);

//función ejemplo http://php.net/manual/es/function.iptcembed.php

function iptc_make_tag($rec, $data, $value) {

$length = strlen($value);

$retval = chr(0x1C) . chr($rec) . chr($data);

if($length < 0x8000) { $retval .= chr($length >> 8) . chr($length & 0xFF);

} else {

$retval .= chr(0x80) .

chr(0x04) .

chr(($length >> 24) & 0xFF) .

chr(($length >> 16) & 0xFF) .

chr(($length >> 8) & 0xFF) .

chr($length & 0xFF);

}

return $retval . $value;

}

Eso es todo, aquí la imagen original y aquí la modificada. El código fuente de ese ejemplo también está aquí.

+ fotos

Almacenado en PHP, línea de comandos, IPTC

por Jorge Martínez Mauricio :)

¿Algo que comentar?


Suscríbete por correo electrónico, recibirás los nuevos escritos antes que nadie y es gratis 😊

Relacionadas

    blog / fotos / archivo

    Fotografías de

    Escribir con UTF-8 en etiquetas IPTC

    tar.mx es un blog sobre fotografía, tecnología y otras chunches