Akıllı Cihaz Fotoğraflarında Otomatik Yön Düzeltme | PHP & CodeIgniter

Şub 25, 2020
fotoğraf yön düzeltme exif orientation php php image rotate codeigniter image orientation image_fix_orientation php gd exif imagemagick orientation php fotoğraf düzenleme codeigniter helper exif php otomatik fotoğraf düzeltme
Akıllı Cihaz Fotoğraflarında Otomatik Yön Düzeltme | PHP & CodeIgniter

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;        }    }}

 


Bertuğ Fahri Özer
Bertuğ Fahri Özer
super user

captcha