Browse Day

Haziran 9, 2010

PHP ile Resimlere Fligram Ekleme

Evet arkadaşlar PHP sadece bir kaç if else ve while gibi komutlardan oluşan cılız bir dil değildir. Yapabildikleri bundan çok daha fazladır aslında. Bu dersimizde size sınırlı bilgimle PHP ile resim işleme yöntemlerinden biri olan resimlere nasıl fligram eklenebileceğini göstermeye çalışacağım.

Bu işlemlere başlayabilmek için herşeyden önce sunucunuzda PHP’nin gd kütüphanesinin kurulu ve aktif olması gerekmektedir. Esasında bir çok host varsayılan olarak bu kütüphaneyi sunar. Sisteminizdeki kurulumun gd kütüphanesinin etkinliğini denetlemek için boş bir sayfaya phpinfo(); yazarak sayfayı kaydedin ve sonra tarayıcınızdan sayfayı çağırın. PHP’nin tüm bilgileri ekranda listelenecektir. Burada gd alanını bulun. Benim sistemimdeki görüntü şöyle

phpinfo

Eğer kendi özelliklerinizde gd yok ya da disable olarak görülüyorsa kütüphaneyi yükleyin ve/veya etkinleştirin.

Şimdi gelelim asıl dersimize önce resimlerimize bir bakalım. Şimdi aşağıda üzerine fligram ekleyeceğimiz resimi görüyoruz.

orjinal

Bu resime ekleyeceğimiz fligram da aşağıdaki olsun.

fligram

Şimdi de kodumuzu yazmaya başlayalım. İlk önce orjinal resmimizi ve üzerine eklenecek fligramı ve bunların konumlarını belirtiyoruz.

$fligram = imagecreatefrompng('images/fligram.png');
$resim = imagecreatefromjpeg('images/orjinal.jpg')

Ardından fligramın resim üzerinde duracağı konum için kenar boşluklarını ve konumlandırmak için yine fligramın genişlik ve yükseklik değerlerini alıyoruz.

$marge_right = 10;
$marge_bottom = 10;
$konum_x = imagesx($fligram);
$konum_y = imagesy($fligram);

Şimdi de aşağıdaki gibi fligramın resmin sağ alt köşesinde istediğimiz konumda olmasını sağlayalım.

imagecopy($resim, $fligram, imagesx($resim) - $konum_x - 10, imagesy($resim) - $konum_y - $marge_bottom, 0, 0, imagesx($fligram), imagesy($fligram));

Son olarak da çıktımızı oluşturuyoruz.

header('Content-type: image/png');
imagepng($resim);
imagedestroy($resim);

Bu kodların tamamını php imleri içine aldığımızda aşağıdaki gibi bir sonuç elde ediyoruz.

<?php
$fligram = imagecreatefrompng('images/fligram.png');
$resim = imagecreatefromjpeg('images/orjinal.jpg');

$marge_right = 10;
$marge_bottom = 10;
$konum_x = imagesx($fligram);
$konum_y = imagesy($fligram);

imagecopy($resim, $fligram, imagesx($resim) - $konum_x - 10, imagesy($resim) - $konum_y - $marge_bottom, 0, 0, imagesx($fligram), imagesy($fligram));

header('Content-type: image/png');
imagepng($resim);
imagedestroy($resim);
?>

Sonuçta aşağıdaki resmi elde etmiş olduk.

örnek

Görüldüğü gibi resimimize fligramımızı yerleştirdik. Burada dikkat edilmesi gereken bir nokta var. Kodun 12. satırında header('Content-type: image/png'); ifadesini görüyoruz. Eğer bir PHP kodunda header content kullanılıyorsa onun yukarısında ekrana hiç bir şey yazdırmamalısınız yoksa sayfanızda resim yerine saçma sapan yazılar görürsünüz. Burada ekrana birşey yazdırmamalısınız derken çıktı olarak demek istiyorum yoksa kod kısmında bir sıkıntı yok. Kısaca şöyle özetleyelim header content varsa onun yukarısında print ve echo olmamalı.

Peki bu durumda ne yapacağız. Çok basit zaten content ile çıktımızı png olarak ürettiğimiz için oluşturduğumuz yukardaki kodu ayrı bir sayfa olarak kaydedeceğiz. Mesela ben ornek.php olarak kaydettim. Daha sonra bu php sayfasını tıpkı bir resmi çağırıyormuşuz gibi çağırıyoruz. Yani <img src="ornek.php>yazacağız.

Daha iyi anlaşılması için isterseniz aşağıdaki koda bakalım

<style type="text/css">
<!--
body,td,th {
    color: #FFFFFF;
}
body {
    background-color: #006699;
}
-->
</style>
<p>Deneme sayfası</p>
<p>
  <img src="button.php?">

Bu çok basit sayfadan da görüldüğü gibi ornek.php sayfamızı tıpkı bir resim gibi çağırdık ve sonuç aşağıdaki gibi oldu

son

Bu şekillde gd kütüphanesi kullanarak resmimizin üzerine günün tarihini bile attırabiliriz yani fligram bir resim değil de belirlediğimiz bir yazı da olabilir. Hatta bir döngü ile böyle belli konumdaki dosyaları sıra ile bu işlemden geçirerek birden çok resim üzerinde işlem yapabiliriz. Tabi istersek fligramın konumunu da değiştirebiliriz ancak bunların hepsi birer ayrı bir yazı konusu onun için şimdilik burada noktalıyorum hepinize kolay gelsin.

Photoshop CS5 ile Gelen Content-Aware Özelliği ile İçerik Doldurma

Merhabalar. Okul, iş ve projeler derken uzun süre ayrı kaldığım sayfama yeniden kavuşmuş bulunuyorum.

Bu yazımda sizlere Photoshop CS5’in Content-Aware özelliğini kullanarak bir fotoğraftan kestiğimiz bir alanın, Photoshop tarafından nasıl otomatik doldurulduğunu göstereceğim. Adobe, bence son zamanlarındaki en büyük yenilikleri CS5 paketinde yaptı ve çoğu program yeniden doğdu diyebilirim. Söz konusu yeniliklerden biri de içerik doldurma yani content aware. Yalnız baştan belirtmek isterim ki bu özellik çok başarılı sonuçlar verse de yüzde yüz mükemmel diyemeyiz. İşleminizi yaptıktan sonra sizin de elle düzeltmeniz gereken bazı yerler olabiliyor.

Neyse derse geçeklim. Önce Photoshop CS5 ile bir fotoğraf açalım.

ilk resim

Fotoğrafı açtıktan sonra olmasını istemediğimiz bölgeyi daha önce şu yazımda bahsetmiş olduğum seçim araçlarından birini kullanarak seçiyoruz.

seçimimizi yapıyoruz

Seçimimizi yaptıktan sonra daha düzgün bir sonuç almak seçim alanımızı isterseniz biraz genişletelim ki seçilen alan fotoğraftan silindikten sonra kenarları resimde iz bırakmasın. Bunu yapmak için şu yolu izlemek yeterli. Select menüsünden Modify seçeneğinin üzerine gelince beliren alt menüden Expand… öğesine tıklıyoruz. Açılan kutuya ben 3 değerini girdim. Size de 3 değerini tavsiye ederim.

Bunları yaptıktan sonra seçili alanı silmek için klavyemizdeki Delete tuşuna basıyoruz. Karşımıza aşağıdaki kutu çıkıyor.

Content-Aware

Burada hiç bir şeyi işaretlemenize veya değiştirmenize gerek yok tabi eğer içerik doldurma özelliğini kullanacaksanız. Yoksa Use: alanından Content-Aware yerine istediğiniz başka bir özelliği de seçebilirsiniz tabi.

Uzatmayalım kutudaki OK butonuna tıkladıktan sonra Photoshop ilgili alanı resimden çıkaracak ve çıkarılan bölümü bizim için aşağıdaki gibi dolduracak.

işlemden sonra

Daha sonra Ctrl+D tuş kombinasyonu ile seçimi kaldırıyoruz.

son durum

Görüldüğü gibi yüzde yüz mükemmel olmasa da gayet başarılı bir sonuç. Ancak aşağıdaki resimde de göreceğiniz üzere gökyüzü çizgisi normalden biraz daha aşağıda. Bu bozulma çok keskin değil ve sanki orjinal gibi görünse de istersek Photoshop’un diğer özellikleriyle bu durumu da düzeltebiliriz.

bakış

Ancak bu tür düzeltmeler bu yazının konusu olmadığı için başka bir zamana bırakıyoruz.

Content-Aware çok kullanışlı bir özellik olsa da her fotoğrafta aynı sonucu alamayabilirsiniz. Yukardaki gibi düz bir ilerleyiş halindeki fotoğraflarda çok başarılıyken çok renkli ve çok karışık fotoğraflarda aynı başarıyı gösteremiyor. Ancak unutmamak gerekir ki bu bir başlangıç. Gelecekte çok daha iyi sonuçlar bizi bekliyor.

Bu derslik te bu kadar şimdilik hoşçakalın.