bssanchez93

GD - FIX orientation and Remove EXIF from Images

Aug 31st, 2017
194
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
PHP 2.88 KB | None | 0 0
  1. <?php
  2.  
  3. /**
  4.  * Función que crea un clon de la imagen que se pase como argumento
  5.  * arreglándo la rotación y removiendo la información EXIF usando GD
  6.  *
  7.  * @param  string $ruta ruta de la imagen
  8.  */
  9. function removeRotation($ruta)
  10. {
  11.     // Obtener extension del archivo para obtener su ruta (Próxima lo cambio por filetype)
  12.     $ext  = strtolower(end(explode('.', $ruta)));
  13.  
  14.     // Generar imagen a partir de la imagen cargada en la ruta
  15.     $imagen = null;
  16.     switch($ext) {
  17.         case "jpg":
  18.         case "jpeg":
  19.             $imagen = imagecreatefromjpeg($ruta);
  20.             break;
  21.         case "png":
  22.             $imagen = imagecreatefrompng($ruta);
  23.             break;
  24.     }
  25.  
  26.     if (!is_null($imagen)) {
  27.         // Obtener alto y ancho de la imagen para crear el clon con las mismas dimensiones
  28.         $w = imagesx($imagen);
  29.         $h = imagesy($imagen);
  30.  
  31.         // Obtener datos exif de la imagen actual
  32.         $exif = exif_read_data($ruta);
  33.  
  34.         // Generar el clon de la imagen con las mismas dimensiones
  35.         $clon = imagecreatetruecolor($w, $h);
  36.         imagecopy($clon, $imagen, 0, 0, 0, 0, $w, $h);
  37.  
  38.         // Si tiene el exif de orientación, se gira la misma dependiendo del valor
  39.         if (isset($exif['Orientation'])) {        
  40.             switch($exif['Orientation']) {
  41.                 case 3:
  42.                     $clon = imagerotate($clon, 180, 0);
  43.                     break;
  44.                 case 6:
  45.                     $clon = imagerotate($clon, -90, 0);
  46.                     break;
  47.                 case 8:
  48.                     $clon = imagerotate($clon, 90, 0);
  49.                     break;
  50.             }
  51.         }
  52.  
  53.         /* Exportar clon de imagen con los datos arreglados reemplazando la existente
  54.         * a un 70% de calidad (ese valor se puede cambiar pero no quita mucha calidad
  55.         * pero si reduce bastante el peso)
  56.         */
  57.         switch($ext) {
  58.             case "jpg":
  59.             case "jpeg":
  60.                 imagejpeg($clon, $ruta, 70);
  61.                 break;
  62.             case "png":
  63.                 imagepng($clon, $ruta, 70);
  64.                 break;
  65.         }
  66.  
  67.         // Liberar memoria
  68.         imagedestroy($imagen);
  69.         imagedestroy($clon);
  70.     }
  71. }
  72.  
  73. if (php_sapi_name() == "cli") {
  74.     // Ejemplo usando la terminal
  75.     if ($argc == 1) {
  76.         echo "\033[31mNo se especificó ningún archivo\033[0m\r\n";
  77.         echo "Ej: \033[32mphp \033[36m" . basename(__FILE__) . " \033[0mimagen1.jpg imagen2.png\r\n";
  78.         exit(2);
  79.     }
  80.  
  81.     for($i = 1; $i < $argc; $i++) {
  82.         if (file_exists($argv[$i])) {
  83.             echo "\033[32m[-] Orientación y EXIF removidos " . $argv[$i] . "\033[0m\r\n";
  84.         } else {
  85.             echo "\033[31m[X] No existe el fichero " . $argv[$i] . "\033[0m\r\n";
  86.         }
  87.     }
  88. } else {
  89.     // Ejemplo llamando la función
  90.     removeRotation('example.jpg');
  91. }
Advertisement
Add Comment
Please, Sign In to add comment