İçeriğe geç

PHP ile imageDataURI Oluşturma

Bazı durumlarda; resim dosyalarınızın yolunu göstermek istemeyebilirsiniz. Ya da resimlerinizin kopyalanmasını / çalınmasını istemeyebilirsiniz. Veya yüksek boyutlu resim dosyalarınızın, sayfalarınızın yavaşlamasının önüne geçmek isteyebilirsiniz.

Resim dosyalarınızın, sayfalarınızı yavaşlatmasının önüne geçmek için çeşitli yöntemler var. İlk akla gelenler; resimleri optimize etmek, türlerini değiştirmek veya resmin boyutlarıyla oynamak.

Resimlerinizin çalınmasının önüne geçmek için de; resimlerin üzerine adınızı veya mahlasınızı yazabilirsiniz.

Yukarıdaki saymış olduğunuz yöntemlerin hemen hemen hepsinde resmin özellikleri bozulmakta. Dolayısıyla resmin orjinalliği kaybolmaktadır.

Eğer SEO sizi pek ilgilendirmiyorsa; imageDataURI ile resim dosyalarınızı bozulmadan koruyabilirsiniz. Bu yöntemde esas olan; resmin kaynak kodunun oluşturulmasıdır. Bu kod bir URL yapısına benzer. Bu URL yapısına benzeyen resmin kaynak kodu da <img> elementinin src attribute (özellik) değerine yazılır.

PHP ile herhangi bir resmin imageDataURI’sini oluşturulmasını gerçekleyelim.

Elimizde aşağıdaki resim dosyası olduğunu varsayalım.

Resmimizin bilgileri de aşağıdaki gibidir.

Adı:the-good-the-bad-and-the-ugly
Uzantı:.jpg
Boyut:256Kb

Şimdi gelelim, bu resim dosyamızın dataURI kaynak kodunu oluşturmaya. Öncelikle; dosyamızın yolunu bildiğimizi varsayalım.

$path = './images/the-good-the-bad-and-the-ugly.jpg';

Şimdi de resim dosyamızı alalım.

$image = file_get_contents($path);

Ben basitçe; resim dosyamızı, file_get_contents() ile aldım. Siz dilerseniz; farklı bir yöntemle de bu resim dosyasını alabilirsiniz.

Buradan sonra yapacağımız şey ise; bu resim dosyasını Base64 formatına çevirmek. Bu işlem için de base64_encode() fonksiyonunu kullanacağız.

$dataURI = base64_encode($image);

Bu işlemimizin kısaca özetini geçersek; resim dosyamızı normal bir dosya gibi kabul edip, bu dosyayı Base64 formatına çevirdik. Base64 formatı bir şifreleme ve saklama yöntemidir. Yani; dosya içeriğini alıp Base64 ile şifreledik. Bu sayede hem resim dosyamızın içeriği bir text haline geldi hem de sıkıştırılmış oldu.

Gelelim, bu elimizdeki Base64 formatındaki text yapısını ekranımıza yansıtmaya.

Bunun için de aşağıdaki satırı oluşturalım.

$source = 'data: ' . mime_content_type($path) . ';base64, ' . $dataURI;

Yukarıdaki satırımızda; oluşturmuş olduğumuz URI formatındaki kaynağımızı belirttik. Burada; mime_content_type() fonksiyonu, üzerinde çalıştığımız kaynağımızın bize MIME tipini vermektedir. Bu fonksiyon yerine; finfo_file() fonksiyonunu da kullanabilirsiniz.

finfo_file() fonksiyonunu kullanmak isteseydik, mime_content_type() yerine;

finfo_file(finfo_open(FILEINFO_MIME_TYPE), $path)

şeklinde yazmamız yeterli olacaktı.

Bir diğer yöntem de pathinfo() fonksiyonunu kullanmak.

Görüldüğü; dosyanızın MIME tipini aldıktan sonrasında sadece Base64 ile şifrelenmiş ifadeyi yazmak kalıyor, geriye.

Şimdi de <img> elementinde; bu satırımızı yazalım.

<img src="<?=$source?>" alt="">

Kodlarımızın tamamı aşağıdaki gibi olacaktır.

<?php

$path    = './image/the-good-the-bad-and-the-ugly.jpg';
$file    = file_get_contents($path);
$dataURI = base64_encode($file);

$source = 'data: ' . finfo_file(finfo_open(FILEINFO_MIME_TYPE), $path) . ';base64, ' . $dataURI;
?>

<img src="<?=$source?>" alt="">

Yukarıdaki kodlarımızı tarayıcı da çalıştırdığımızda resim dosyamız normal bir şekilde sayfada görüntülenecektir.

Bu sayfamızın kaynak kodlarını görünlediğimizde; aşağıdaki ekran ile karşılacağız.

Görüldüğü gibi karmakarışık bir yapı elde ettik.

Daha önce de belirttiğimiz gibi; bu işlem ile resim içerikli sayfalarınızın daha hızlı çalışmasını sağlayabilir ve kopyalama / çalınma karşıya önlem olabilir. Lakin SEO odaklı çalışmanız durumunda, bu sizi olumsuz etkileyecektir.

Varolan bir dosya yerine; kullanıcılarınızın yüklediği dosyaları da çevirmek isteyebilirsiniz. Bu durumda yapmanız gereken şey ise; yüklenecek dosyanın tmp adresini almak olacaktır. Yani; PHP ile dosya yüklerken, $_FILES[‘dosya_adi’][‘tmp_name’] değerini kullanmanız yeterlidir.

Bu makale için oluşturmuş olduğum betiği, buradaki Github hesabımdan indirebilirsiniz.

Saygı ve muhabbetle!..

Bu içeriği paylaşmak ister misiniz?

İlk Yorumu Siz Yapın

Bir cevap yazın

E-posta hesabınız yayımlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir

Buradaki içeriklerin tümü kamu malıdır. Kullanılması ve paylaşılması özgürdür.