Contamos con tu ayuda para extender nuestros enunciados en referencia a las ciencias de la computación.
Solución:
Una forma rápida de hacerlo en PHP usando ImageMagick (suponiendo que lo tengas instalado y habilitado).
stripImage();
$img->writeImage($image);
$img->clear();
$img->destroy();
echo "Removed EXIF data from $image. n";
catch(Exception $e)
echo 'Exception caught: ', $e->getMessage(), "n";
?>
Utilizar gd
recrear la parte gráfica de la imagen en una nueva, que guardes con otro nombre.
Ver PHP gd
editar 2017
Utilice la nueva función Imagick.
Abrir imagen:
Asegúrese de mantener cualquier perfil ICC en la imagen
$profiles = $img->getImageProfiles("icc", true);
luego quitar la imagen y volver a colocar el perfil, si corresponde
$img->stripImage();
if(!empty($profiles))
$img->profileImage("icc", $profiles['icc']);
Viene de esta página de PHP, vea el comentario de Max Eremin al final de la página.
Estaba buscando una solución a esto también. Al final, usé PHP para reescribir el JPEG con TODOS los datos Exif eliminados. No necesitaba nada de eso para mis propósitos.
Esta opción tiene varias ventajas...
- El archivo es más pequeño porque los datos EXIF se han ido.
- No hay pérdida de calidad de imagen (porque los datos de la imagen no se modifican).
También una nota sobre el uso de imagecreatefromjpeg: probé esto y mis archivos se hicieron más grandes. Si configura la calidad en 100, su archivo será MÁS GRANDE, porque la imagen se volvió a muestrear y luego se almacenó sin pérdidas. Y si no usas calidad 100, pierdes calidad de imagen. La ÚNICA forma de evitar el remuestreo es no usar imagecreatefromjpeg.
Aquí está mi función...
/**
* Remove EXIF from a JPEG file.
* @param string $old Path to original jpeg file (input).
* @param string $new Path to new jpeg file (output).
*/
function removeExif($old, $new)
// Open the input file for binary reading
$f1 = fopen($old, 'rb');
// Open the output file for binary writing
$f2 = fopen($new, 'wb');
// Find EXIF marker
while (($s = fread($f1, 2)))
$word = unpack('ni', $s)['i'];
if ($word == 0xFFE1)
// Read length (includes the word used for the length)
$s = fread($f1, 2);
$len = unpack('ni', $s)['i'];
// Skip the EXIF info
fread($f1, $len - 2);
break;
else
fwrite($f2, $s, 2);
// Write the rest of the file
while (($s = fread($f1, 4096)))
fwrite($f2, $s, strlen($s));
fclose($f1);
fclose($f2);
El código es bastante simple. Abre el archivo de entrada para leer y el archivo de salida para escribir, y luego comienza a leer el archivo de entrada. Da datos de uno a otro. Una vez que alcanza el marcador EXIF, lee la longitud del registro EXIF y salta esa cantidad de bytes. Luego continúa leyendo y escribiendo los datos restantes.
Al final de la artículo puedes encontrar las explicaciones de otros usuarios, tú todavía eres capaz dejar el tuyo si lo deseas.