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:
Imagen de entrada:
¡Haz clic para puntuar esta entrada!
(Votos: 0 Promedio: 0)