Akıllı cihazlarla çekilen fotoğrafların yönünü otomatik düzeltme

Akıllı cihazlarla çekilen fotoğrafların yönünü otomatik düzeltme

Dijital kameralar ve akıllı telefonlarla çekilen fotoğrafların EXIF bilgilerinde cihazın hangi açıyla (sola veya sağa yatay, düz veya ters düşey) tutularak resmin çekildiğini, yani oryantasyonunu temsil eden bir bilgi bulunabilir. Bazı görüntüleme programları veya tarayıcılar bu bilgiyi dikkate alarak resmi çevirirken bazıları bunu yapmıyor. Bilgisayarda bakarken düzgün görünen fotoğraf, web sitesine yüklendiğinde yatık çıkabiliyor.

İlan eklerken bu tip sorunları atmadan önce düzenlemek yerine, kullanıcı uğraşmasın diye PHP de EXIF bilgisine göre otomatik düzenlemek için şu şekilde fonksiyonlarımız.

benim yazdığım Codeigniter 3.x için :

helper

if (!function_exists('image_fix_orientation')) {
    function image_fix_orientation($sourcePath,$flag=false)
    {
        $ci =& get_instance();
        $ci -> load -> library('image_lib');

        $imgdata = exif_read_data($sourcePath,'IFD0');

        $config = ['image_library' => 'gd2',
                   'source_image' => $sourcePath];

        $ci -> load -> library('image_lib', $config);

        switch ($imgdata['Orientation']) {
            case 3:
                $config['rotation_angle'] = '180';
                break;
            case 6:
                $config['rotation_angle'] = '270';
                break;
            case 8:
                $config['rotation_angle'] = '90';
                break;
        }

        if($ci->image_lib->initialize($config))
            $flag = true;
        else
            $flag=false;
        if(!$ci -> image_lib -> rotate())
            echo $this->image_lib->display_errors();
        return $flag;
    }
}

controller içinde : 

public function upladImage(){
   //....ekleme adımları yapıldıktan sonra....

   if ($this -> upload -> data()) {//resim yüklendiyse yönünü düzelt.
        $this->load->helper('helperAdi');
        image_fix_orientation($resimYolu);
   }
}

Frameworksüz sadece PHP ile kullanabileceğiniz fonsiyonları kaynağından kopyala/yapıştır yaparsam;

GD :

function image_fix_orientation(&$image, $filename) {//2 adımda da dosya yolunu yollamalısınız.
    $exif = exif_read_data($filename);

    if (!empty($exif['Orientation'])) {
        switch ($exif['Orientation']) {
            case 3:
                $image = imagerotate($image, 180, 0);
                break;

            case 6:
                $image = imagerotate($image, -90, 0);
                break;

            case 8:
                $image = imagerotate($image, 90, 0);
                break;
        }
    }
}

Tek satırda GD ile :

function image_fix_orientation(&$image, $filename) {
    $image = imagerotate($image, array_values([0, 0, 0, 180, 0, 0, -90, 0, 90])[@exif_read_data($filename)['Orientation'] ?: 0], 0);
}

ImageMagic ile :

function image_fix_orientation($image) {
    if (method_exists($image, 'getImageProperty')) {
        $orientation = $image->getImageProperty('exif:Orientation');
    } else {
        $filename = $image->getImageFilename();

        if (empty($filename)) {
            $filename = 'data://image/jpeg;base64,' . base64_encode($image->getImageBlob());
        }

        $exif = exif_read_data($filename);
        $orientation = isset($exif['Orientation']) ? $exif['Orientation'] : null;
    }

    if (!empty($orientation)) {
        switch ($orientation) {
            case 3:
                $image->rotateImage('#000000', 180);
                break;

            case 6:
                $image->rotateImage('#000000', 90);
                break;

            case 8:
                $image->rotateImage('#000000', -90);
                break;
        }
    }
}

 

Akıllı cihazlarla çekilen fotoğrafların yönünü otomatik düzeltme - bertugfahriozer.com Akıllı cihazlarla çekilen fotoğrafların yönünü otomatik düzeltme - bertugfahriozer.com Akıllı cihazlarla çekilen fotoğrafların yönünü otomatik düzeltme - bertugfahriozer.com Akıllı cihazlarla çekilen fotoğrafların yönünü otomatik düzeltme - bertugfahriozer.com

Akıllı cihazlarla çekilen fotoğrafların yönünü otomatik düzeltme - bertugfahriozer.com

Akıllı cihazlarla çekilen fotoğrafların yönünü otomatik düzeltme - bertugfahriozer.com

Akıllı cihazlarla çekilen fotoğrafların yönünü otomatik düzeltme - bertugfahriozer.com

Akıllı cihazlarla çekilen fotoğrafların yönünü otomatik düzeltme - bertugfahriozer.com

Akıllı cihazlarla çekilen fotoğrafların yönünü otomatik düzeltme - bertugfahriozer.com
Akıllı cihazlarla çekilen fotoğrafların yönünü otomatik düzeltme - bertugfahriozer.com