Портретные изображения поворачиваются на 270 градусов по часовой стрелке с помощью библиотеки изменения размера кода - PullRequest
0 голосов
/ 17 января 2019

Всякий раз, когда я загружаю изображение и отображаю его с помощью тега изображения / свойства фонового изображения, изображение автоматически поворачивается на 270 градусов по часовой стрелке, но когда я открываю изображение в новом окне, оно отображается правильно.

Я пытался отобразить изображение с помощью простой вкладки изображений с основными стилями, но если изображение находится в портретном режиме, оно преобразует его в альбомную

Когда я пытался изменить его размер с помощью библиотеки изменения размера codeignitor (GD2), он ведет себя так же, как HTML (поворачивая получившееся изображение на 270 градусов по часовой стрелке). После изменения размера они постоянно переводятся в ландшафтный режим. Код, используемый для изменения размера изображений в CodeIgniter:

        $this->load->library( 'image_lib' );
        $config[ 'image_library' ] = 'gd2';
        $config[ 'source_image' ] = $file;
        $config[ 'maintain_ratio' ] = TRUE;
        $config[ 'overwrite' ] = TRUE;
        $config[ 'master_dim' ] = 'auto';
        $config[ 'width' ] = $width;
        $config[ 'height' ] = $height;
        $config[ 'autoOrient' ] = FALSE;
        $config[ 'new_image' ] = $file;
        $this->image_lib->initialize( $config );
        if ( !$this->image_lib->resize() ) {
            return array( 'msg' => $this->image_lib->display_errors(), 'error' => 0 );
        }else{
            return array( 'msg' => 'success', 'error' => 1 );
        }

1 Ответ

0 голосов
/ 21 января 2019

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

Изображение автоматически поворачивается на 270 градусов по часовой стрелке, но когда я открываю изображение в новом окне, оно отображается правильно.

На самом деле происходит обратное: изображение не поворачивается, оно отображается точно в том виде, в котором оно было сохранено. Открывая изображение в новом окне браузера или другой программе для работы с изображениями, оно автоматически поворачивается в соответствии со значением ориентации EXIF, чтобы отображаться так, как вы ожидаете.

GD показывает изображение «правильно» в том смысле, что оно не изменяет изображение каким-либо иным образом, кроме как вы его указали.

Чтобы отобразить изображение так, как вы считаете правильным, вам нужно использовать следующий код (из этот ответ ), который зависит от exif extension , являющегося включено в вашем php.ini :

$filepath = ''; // path to the image you want to manipulate.
$image = ''; // using imagecreatefrom...

// Rotate image correctly!
$exif = exif_read_data($filepath);
if (!empty($exif['Orientation'])) {
    switch ($exif['Orientation']) {
        case 1: // nothing
            break;
        case 2: // horizontal flip
            imageflip($image, IMG_FLIP_HORIZONTAL);
            break;
        case 3: // 180 rotate left
            $image = imagerotate($image, 180, 0);
            break;
        case 4: // vertical flip
            imageflip($image, IMG_FLIP_VERTICAL);
            break;
        case 5: // vertical flip + 90 rotate right
            imageflip($image, IMG_FLIP_VERTICAL);
            $image = imagerotate($image, -90, 0);
            break;
        case 6: // 90 rotate right
            $image = imagerotate($image, -90, 0);
            break;
        case 7: // horizontal flip + 90 rotate right
            imageflip($image, IMG_FLIP_HORIZONTAL);
            $image = imagerotate($image, -90, 0);
            break;
        case 8:    // 90 rotate left
            $image = imagerotate($image, 90, 0);
            break;
    }
}
...