Как повернуть все изображения в папке на основе exif и переопределить старые фотографии W / php - PullRequest
0 голосов
/ 13 октября 2019

У меня есть группа фотографий, загруженных по ftp в / Photos (некоторые из них .JPG .jpg .png и т. Д.), Но не все повернуты правильно. У меня есть php-скрипт, который может сказать мне, сколько они должны бытьповернут, чтобы быть в правильном направлении (ландшафт / портрет), но я не могу понять, как сохранить их или сделать фактическое вращение

Я пытался

//define image path
$filename="image.jpg";

// Load the image
$source = imagecreatefromjpeg($filename);

// Rotate
$rotate = imagerotate($source, $degrees, 0);

//and save it on your server...
imagejpeg($rotate, "myNEWimage.jpg");

И:

<code><?php
    $files = glob('{**.jpg,*.JPG,*.png, *.PNG, *.PNG}',GLOB_BRACE);
    echo '<pre>'; print_r($files); echo '
';foreach ($ files as $ i) {// GET Rotate $ exif = @exif_read_data ($ i, 0, true);$ ориентация = @ $ exif ['IFD0'] ['ориентация'];if ($ ориентация == 7 || $ ориентация == 8) {$ градусов = 90;эхо "| 90";} elseif ($ ориентация == 5 || $ ориентация == 6) {$ градусов = 270;эхо "| 270";} elseif ($ ориентация == 3 || $ ориентация == 4) {$ градус = 180;эхо "| 180";} else {$ градусов = 0;эхо "| 0";} $ filename = $ i;$ source = imagecreatefromjpeg ($ filename);$ rotate = imagerotate ($ source, $ градусов, 0);// и сохранить его на вашем сервере ... imagejpeg ($ rotate, $ i);} echo '
'; print_r($files); echo '
';эхо "ROTATED:";foreach ($ files as $ i) {printf ("", basename ($ i));}?>

Мой текущий код:

<code><?php
    $files = glob('{**.jpg,*.JPG,*.png, *.PNG, *.PNG}',GLOB_BRACE);
    echo '<pre>'; print_r($files); echo '
'; foreach ($ files as $ i) {// GET Rotate $ exif = @exif_read_data ($ i, 0, true); $ Ориентация = @ $ exif ['IFD0'] ['Ориентация']; if ($ Ориентация == 7 || $ Ориентация == 8) {$ градусов = 90; эхо "|90 ";} elseif ($ ориентация == 5 || $ ориентация == 6) {$ градус = 270; эхо" |270 ";} elseif ($ ориентация == 3 || $ ориентация == 4) {$ градус = 180; эхо" |180 ";} else {$ градусов = 0; эхо" |0 ";}} echo '
'; print_r($files); echo '
'; echo" ROTATED: "; foreach ($ files as $ i) {printf ("", basename ($ i));}?>

сообщений об ошибках нет. Этот сценарий находится в папке с фотографиями (по причинам отладки), но он может выводить фотографии, а не вращать и сохранятьих

Ответы [ 2 ]

0 голосов
/ 21 октября 2019

Я нашел решение, добавив немного кода кому-то, чтобы он сканировал папку и редактировал все фотографии, я уверен, что смогу сделать его более эффективным

<code><?PHP
/**
 * Document   : EXIF Image Rotate Class
 * OG Author     : josephtinsley
 * Edited by    : Sir Charles (Added for each loop to edit more than one file <3)
 * Description: PHP class that detects a JPEG image current orientation and rotates a image using the images EXIF data.
 * http://twitter.com/josephtinsley
*/
class RotateImage {
    /*
     * @param string $setFilename - Set the original image filename
     * @param array $exifData - Set the original image filename
     * @param string $savedFilename - Set the rotated image filename
     */

    private $setFilename    = "";
    private $exifData       = "";
    private $degrees        = "";

    public function __construct($setFilename) 
    {
        try{
            if(!file_exists($setFilename))
            {
                throw new Exception('File not found.');
            } 
            $this->setFilename = $setFilename;
        } catch (Exception $e ) {
            die($e->getMessage());
        } 
    }
    /*
     * EXTRACTS EXIF DATA FROM THE JPEG IMAGE
     */
    public function processExifData() 
    {
        $orientation = 0;

        $this->exifData = exif_read_data($this->setFilename);

        foreach($this->exifData as $key => $val)
        {
            if(strtolower($key) == "orientation" )
            {
                $orientation = $val;
                break;
            }
        }
        if( $orientation == 0 )
        {
            $this->_setOrientationDegree(1);
        }

        $this->_setOrientationDegree($orientation); 
    } 
    /*
     * DETECTS AND SETS THE IMAGE ORIENTATION
     * Orientation flag info  http://www.impulseadventure.com/photo/exif-orientation.html
     */
    private function _setOrientationDegree($orientation)
    {
       switch($orientation):
           case 1: 
               $this->degrees = 0;
               break;
           case 8:
               $this->degrees = 90;
               break;
           case 3:
               $this->degrees = 180;
               break;
           case 6:
               $this->degrees = 270;
               break;
       endswitch;
       $this->_rotateImage();
    }  
    /*
     * ROTATE THE IMAGE BASED ON THE IMAGE ORIENTATION
     */
    private function _rotateImage() 
    {
        if($this->degrees < 1 )
        {
            return FALSE;
        }
        $image_data = imagecreatefromjpeg($this->setFilename);
        return imagerotate($image_data, $this->degrees, 0);  
    } 
    /*
     * SAVE THE IMAGE WITH THE SAME FILENAME
     */
    public function savedFileName($savedFilename) 
    {
        if($this->degrees < 1 )
        {
            return false;   
        }
        $imageResource = $this->_rotateImage();
        if($imageResource == FALSE)
        {
            return false;   
        }
        imagejpeg($imageResource, $savedFilename);  
    } 
} //END CLASS
    $files = glob('{**.jpg,*.JPG,*.png, *.PNG, *.PNG}',GLOB_BRACE); //Get all files in current dir with extenshions .jpg .JPG .png .PNG .PNG (CASE SENSITIVE)
    echo '<pre>'; print_r($files); echo '
'; // напечатать arry таквы знаете, какие файлы были отредактированы foreach ($ files as $ i) {$ imageFile = $ i; // просто передайте эту переменную в случае, если вы хотите указать заданный файл, измените $ i на "FILE_NAME.JPG" $ сохраненный_файл = $imageFile; // если вы хотите иметь его под новым именем файла, используйте $ saveFile = "rotated _". $ imageFile;$ rotate = new RotateImage ($ imageFile);$ Rotate-> processExifData ();$ Rotate-> savedFileName ($ savedFile);// Распечатать ''. "
"; // это для сохранения его под другим именем, чтобы увидеть diffrence (хорошо для отладки) print'» "
". //! ПОКАЗАТЬ СОХРАНЕННОЕ ВРАЩЕННОЕ ИЗОБРАЖЕНИЕ print '

'. $ I. '


'; // показать имя изображения под img (хорошо для отладки)}?>
0 голосов
/ 13 октября 2019

Ваш код не логичен, вам нужно использовать $rotate для вашего $files Ознакомьтесь с основной документацией Функция imagerotate

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...