Saltar al contenido

Copiar una imagen y conservar sus datos EXIF ​​/ IPTC con PHP imageCreateFromJpeg?

Solución:

No está haciendo nada malo, pero GD no se ocupa de los datos Exif de IPTC en absoluto, ya que está más allá del alcance de lo que hace GD.

Tendrá que usar una biblioteca de terceros u otra extensión de PHP para leer los datos de la imagen de origen y volver a insertarlos en la imagen de salida creada por imagejpeg.

Aquí hay algunas bibliotecas de interés: pel (biblioteca php exif), un ejemplo en php.net que muestra cómo usar pel para hacer lo que quiere, kit de herramientas de metadatos php, función iptcembed ().

Aquí hay un ejemplo de escalado de imagen usando gd y copiando perfil de color Exif e ICC usando PEL:

function scaleImage($inputPath, $outputPath, $scale) {
    $inputImage = imagecreatefromjpeg($inputPath);
    list($width, $height) = getimagesize($inputPath);
    $outputImage = imagecreatetruecolor($width * $scale, $height * $scale);
    imagecopyresampled($outputImage, $inputImage, 0, 0, 0, 0, $width * $scale, $height * $scale, $width, $height);
    imagejpeg($outputImage, $outputPath, 100);
}

function copyMeta($inputPath, $outputPath) {
    $inputPel = new lsolesenpelPelJpeg($inputPath);
    $outputPel = new lsolesenpelPelJpeg($outputPath);
    if ($exif = $inputPel->getExif()) {
        $outputPel->setExif($exif);
    }
    if ($icc = $inputPel->getIcc()) {
        $outputPel->setIcc($icc);
    }
    $outputPel->saveFile($outputPath);
}

copy('https://foroayuda2.foroayuda.es/wp-content/uploads/2023/03/2-imagen-original.jpg', 'input.jpg');
scaleImage('input.jpg', 'without_icc.jpg', 0.2);
scaleImage('input.jpg', 'with_icc.jpg', 0.2);
copyMeta('input.jpg', 'with_icc.jpg');

Imágenes de salida:

Salida sin ICC


Salida con ICC copiado

Imagen de entrada:

Imagen original

¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)



Utiliza Nuestro Buscador

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *