[Çözüldü]Resim boyutlandırmak.

Başlatan ecarpar, 08 Ekim 2010 - 23:00:21

« önceki - sonraki »

0 Üyeler ve 1 Ziyaretçi konuyu incelemekte.

ecarpar

Kendi kendime hem biraz php öğreneyim hem action script bilgimi biraz daha geliştirip biraz daha dinamik bilgilere sahip olmak hemde ihtiyaçtan  ;D bir resim albümü yapayım dedim flash + php ile elimde resim boyutlandıran bir php var hazır buldum kullanımı kolay geldi aldım kullanıyorum yaptığı iş tam olarak şu bir resmin sadece genişliğini veriyorsunuz o sizin için resmi sündürmeden şeklini bozmadan istediğiniz genişliğe ve aynı oranda yüksekliğini otomatik ayarlıyarak boyutlandırıyor yani 1024 px lik bir resmin sadece 800 diyerek 800x 600 lük bir resim elde ediyorsunuz.

Şİmdi benim sorunum şu ben yüzde olarak küçültmek istiyorum resmi çünki bu şekilde kullanınca dikey olarak çekilmiş ve yatay olarak çekilmiş olarak 2 adet dosya kullanmam gerekiyor dikeye göre olan boyutlandırmada yatay çekilmiş fotoğraf sıkışık çıkıyor yatay olarak çekilmiş fotoğraflar için olan dosyadada diket fotoğraflar basık çıkıyor.

Eğer yanlış düşünüyorsam söyleyin eğer boyutunu bilmediğim bir fotoğraf varsa bunu küçültmenin en kolay yolu yüzde (%) olarak küçültmek herne olursa olsun fotoğraf kendi çekin yönüne göre yüzde cinsinden küçüleceği için her iki fotoğraf cinside düngün görüntülenecek.

Kod işe yarıyor ufak bir düzeltme ile düzelicek gibiyse bilen birilerinden yardım istiyorum..

<? 

//klasordeki png ve jpeg'leri boyutlandýran bir script
// Osman Yüksel 28.03.2005 
//Not bu kisi ben degilim :) 
$buyuk = "buyuk/";  //ana resimlerin bulunduðu klasor
$kucuk = "kucuk/";  //kucultulecek resimlerin olacaðý klasor 
$genislik = "600";
if (!file_exists($kucuk)) {//eðer klasor yoksa 
echo "$kucuk klasoru yok"; 
exit; 
} #if 
if (!file_exists($buyuk)) {//eðer klasor yoksa 
echo "$buyuk klasoru yok"; 
exit; 
} #if 

if (!is_writeable($kucuk)) { //eðer klasore yazma izni yoksa 

echo "$kucuk klasorune yazma izniniz bulunmuyor"; 

exit; 

} #if 
//$buyuk icindeki dosyalarý al boyutunu deðiþtirip $kucuk icine kaydet
$klasor = @opendir($buyuk); 
while ($dosya = readdir($klasor)) { //her dosya için 
    // eðer uzantý jpg veya png ise ve bu bir klasor deðilse 
    if($dosya == "." || $dosya == ".." || is_dir($buyuk.$dosya) || 

    (!preg_match("/.jpg/",$dosya) AND !preg_match("/.png/",$dosya))) continue; 
    $fp = @fopen($buyuk.$dosya,"r");  //dosyayý aç 
    $ozellik = @GetImageSize($buyuk.$dosya); //resmin özelliklerini al 
    $en1 = $ozellik[0]; 
        $boy1 = $ozellik[1]; 
         
        if ($en1>$boy1){

            if( $en1 > $genislik) 
            { 
                $en = $genislik; 
                $boy = floor(($en / $en1) * $boy1); 
            } else { 
                $en = $en1; 
                $boy = $boy1; 
            } 
            }else{
             if( $en1 > 90) 
            { 
                $boy = 90; 
                $en = floor(($boy / $boy1) * $en1); 
            } else { 
                $en = $en1; 
                $boy = $boy1; 
            } }
     $tur = $ozellik[2];  //resmin tipi  2 = jpeg , 3 = png 
    if ($tur=="2") { //eðer jpeg ise 

    echo "$dosya dosyasinin boyutu $en x $boy olarak degistiriliyor ... "; 
    $kaynak = imagecreatefromjpeg($buyuk.$dosya); //jpegden dosyayý al 
    $hedef = imagecreatetruecolor($en,$boy);  //true colour olarak yeni bir resim oluþtur
    //kaynaðýn boyutunu deðiþtirip $hedefe yaz 
    imagecopyresized($hedef,$kaynak,0,0,0,0,$en,$boy,imagesx($kaynak),imagesy($kaynak));
    //hedefi dosyaya yaz 

    imagejpeg($hedef, $kucuk.$dosya); 

    echo "[Tamam]<br>"; 

    } #else 

    elseif  ($tur=="3") { //eðer png ise 

    echo "$dosya dosyasinin boyutu $en x $boy olarak degistiriliyor ... "; 

    $kaynak=ImageCreateFrompng($buyuk.$dosya); //png'den dosya al 

    $hedef=ImageCreatetruecolor($en,$boy); //true colour olarak yeni bir resim oluþtur 

    //kaynaðýn boyutunu deðiþtirip $hedefe yaz 

    ImageCopyResized($hedef,$kaynak,0,0,0,0,$en,$boy,ImageSX($kaynak),ImageSY($kaynak)); 

    //hedefi dosyaya yaz 

    Imagepng($hedef, $kucuk.$dosya); 

    echo "[Tamam]<br>"; 

    } #elseif 

    @fclose($fp); //dosyayý kapat 

} #while 

?>




Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 08 Ekim 2010 - 23:02:17

Yada varsa bu istediğimi yapan resmi yüzdeye göre küçülten bir php onuda kabul ederim  :D Kendin niye yazmıyorsun derseniz php den çok çok az anlıyorum xml hazırlayan bir dosyayı bile 3-4 saatte hazırlıyabildiysem bu benim 1 yılımı alır herhalde..


Mesaj tekrarı yüzünden mesajınız birleştirildi. Bu mesajın gönderim tarihi : 08 Ekim 2010 - 23:13:08

* bir şey buldum fakat ben klasörün içini değiştirsin istiyorum yani tek tek ben vermiyeyim istiyorum dosya isimlerini yükledikten sonra topluca bu işi yapsın istiyorum bunuda vereyim.

<?

if($_GET['image']){
$image = $_GET['image'];

if($_GET['type']=="jpg"){
header("Content-type: image/jpeg");
}elseif($_GET['type']=="gif"){
header("Content-type: image/gif");
}elseif($_GET['type']=="png"){
header("Content-type: image/png");
}else{
if(substr($image, -3)=="jpg" || substr($image, -3)=="JPG"){header("Content-type: image/jpeg");}
elseif(substr($image, -3)=="gif" || substr($image, -3)=="GIF"){header("Content-type: image/gif");}
elseif(substr($image, -3)=="png" || substr($image, -3)=="PNG"){header("Content-type: image/png");}
}

if(substr($image, -3)=="jpg" || substr($image, -3)=="JPG"){$im = imagecreatefromjpeg($image);}
elseif(substr($image, -3)=="gif" || substr($image, -3)=="GIF"){$im = imagecreatefromgif($image);}
elseif(substr($image, -3)=="png" || substr($image, -3)=="PNG"){$im = imagecreatefrompng($image);}

if($_GET['percent']){
$x = round((imagesx($im)*$_GET['percent'])/100);
$y = round((imagesy($im)*$_GET['percent'])/100);
$yyy=0;
$xxx=0;
$imw = imagecreatetruecolor($x,$y);
}elseif($_GET['w'] and $_GET['h']){
$x = $_GET['w'];
$y = $_GET['h'];
$yyy=0;
$xxx=0;
$imw = imagecreatetruecolor($x,$y);
}elseif($_GET['maxim_size']){
if(imagesy($im)>=$_GET['maxim_size'] || imagesx($im)>=$_GET['maxim_size']){
if(imagesy($im)>=imagesx($im)){
$y = $_GET['maxim_size'];
$x = ($y*imagesx($im))/imagesy($im);
}else{
$x = $_GET['maxim_size'];
$y = ($x*imagesy($im))/imagesx($im);
}
}else{
$x = imagesx($im);
$y = imagesy($im);
}
$yyy=0;
$xxx=0;
$imw = imagecreatetruecolor($x,$y);
}elseif($_GET['square']){
if(imagesy($im)>=$_GET['square'] || imagesx($im)>=$_GET['square']){
if(imagesy($im)>=imagesx($im)){
$x = $_GET['square'];
$y = ($x*imagesy($im))/imagesx($im);
$yyy=-($y-$x)/2;
$xxx=0;
}else{
$y = $_GET['square'];
$x = ($y*imagesx($im))/imagesy($im);
$xxx=-($x-$y)/2;
$yyy=0;
}
}else{
$x = imagesx($im);
$y = imagesy($im);
$yyy=0;
$xxx=0;
}
$imw = imagecreatetruecolor($_GET['square'],$_GET['square']);
}else{
$x = imagesx($im);
$y = imagesy($im);
$yyy=0;
$xxx=0;
$imw = imagecreatetruecolor($x,$y);
}

imagecopyresampled($imw, $im, $xxx,$yyy,0,0,$x,$y,imagesx($im), imagesy($im));

if($_GET['watermark_text']){
if($_GET['watermark_color']){$watermark_color=$_GET['watermark_color'];
}else{
$watermark_color="000000";
}
$red=hexdec(substr($watermark_color,0,2));
$green=hexdec(substr($watermark_color,2,2));
$blue=hexdec(substr($watermark_color,4,2));

$text_col = imagecolorallocate($imw, $red,$green,$blue);
$font = "swiss.ttf"; //this font(georgia.ttf) heave to be in the same directory as this script
$font_size = 8;
$angle = 0;
$box = imagettfbbox($font_size, $angle, $font, $_GET['watermark_text']);
$x = 5;
$y = 17;
imagettftext($imw, $font_size, $angle, $x, $y, $text_col, $font, $_GET['watermark_text']);

}

if($_GET['type']=="jpg"){imagejpeg($imw);}
elseif($_GET['type']=="gif"){imagegif($imw);}
elseif($_GET['type']=="png"){imagepng($imw);}
else{
if(substr($image, -3)=="jpg" || substr($image, -3)=="JPG"){imagejpeg($imw);}
elseif(substr($image, -3)=="gif" || substr($image, -3)=="GIF"){imagegif($imw);}
elseif(substr($image, -3)=="png" || substr($image, -3)=="PNG"){imagepng($imw);}
}

imagedestroy($imw);
}


KUllanımı ise:
Direk kare thumbnail oluşturmak için:
resizer.php?image=dosya.jpg&square=100 yaparsan 100 x 100 croplanmış thumbnail hazırlar.

Söylediğin şekilde orantılı küçülteceksen:
resizer.php?image=dosya.jpg&maxim_size=400 yaparsan en yüksek kalan tarafını 400 pixele sığdırır.

Yada kendin kroplayabilirsin:
resizer.php?image=dosya.jpg&w=800&h=600

Eşşeğin uzun bir yolculuğa çıkmış olması onun at olarak döneceği anlamına gelmez.

ecarpar

İLk verdiğim ile işimi görüyorum galiba.
de ben bi türlü resm boyutlandırmaa şunu anlıyamadım.
şimdi orantılı olarak hem yükseklik hemde genişlik ' i aynı oranda küçültmek için nasıl bir hesaplama yapmalıyım?
yani (en*boy)/100 gibi bir hesaplama olayı varbunun ama o bölümü çözemedim.
Eşşeğin uzun bir yolculuğa çıkmış olması onun at olarak döneceği anlamına gelmez.

eribol

Mesela 100x50 resmimiz var. Boyu 80 yaptığımız zaman k(katsayı)= 80/100 olur. O halde yeni en=50.k olur ki bu da 40'a eşittir, yani doğru değeri verir.

ecarpar

m.eribol çok sağol. Sorunumu az önce çözdüm elbette paylaşım ortamı ve bende sonucu aldığım kodlarımı buradan sizlerle paylaşıyorum
gene internet üzerinde ararken bir kod bulup üzerinde çalıştım  :D php yi ufaktan çözdüm aslında action script ile yazılış biçimleri aynı..

#$userfile_name = Dosya Adı
#$size = Maximum en genişliği (Buna göre oranlanacak)
#$filedir = Boyutlandırılacak dosyanın bulunduğu dizin
#$thumbdir = Küçültülmüş resimin kopyalanacağı dizin
#$prefix = Küçültülmüş resimin adının önüne alacağı ön ad (prefix örn:tn_)
Fonksiyonu hazır buldum kullanımı yukarda açıklanmış halde. (Yazanın ismi felan yoktu aldığım yerde maalesef o yüzden yazamıyorum) ben içersine 3-5 şey ekledim klasörler yoksa hata versin ve gerekli dizini okuyup içersindeki dosya isimlerini fonksiyona yollasın diyede bir while yazdım sadece. Fakat asıl iş http://php.net/manual/en/function.imagecopyresampled.php de gizliydi okuyup anlamak ve onu koda döküp sonuçlarını görmek oldukça keyifli oldu. 2 satırda olsa büyük zevk heleki sadece kendi içersinde çalışabilen action script gibi bir dil kullanıyrosanız bir dosya oluşturabilmek inanılmaz keyifli oluyor çünki hazırını bumanıza gerek kalmıyor gerektikçe kendiniz üretiyorsunuz :)
<?

$buyuk = "buyuk/";
$kucuk = "kucuk/";
$boyut = "100";

//hata versin azcıkta değilmi :)
if (!file_exists($kucuk)) {//eðer klasor yoksa 
echo "$kucuk klasoru yok"; 
exit; 
} #if 

if (!file_exists($buyuk)) {//eðer klasor yoksa
echo "$buyuk klasoru yok";
exit; 
} #if 
if (!is_writeable($kucuk)) { //eðer klasore yazma izni yoksa 
echo "$kucuk klasorune yazma izniniz bulunmuyor";
exit; 
} #if 

$klasor = @opendir($buyuk); 
while ($dosya = readdir($klasor)) {
  if($dosya == "." || $dosya == ".." || is_dir($buyuk.$dosya) || 
    (!preg_match("/.jpg/",$dosya) AND !preg_match("/.png/",$dosya))) continue; 
resize ($dosya,$boyut,$buyuk,$kucuk,$prefix='');
}
echo($dosya ."<br>");
//$userfile_name = $dosya;


function resize($userfile_name, $size, $filedir='./', $thumbdir='./', $prefix='tn_'){

$max_en = $size;
$max_boy = $size;

$prod_img = $filedir.$userfile_name;
$prod_img_thumb = $thumbdir.$prefix.$userfile_name;

$sizes = getimagesize($prod_img);
$en    = $sizes[0];
$boy   = $sizes[1];

# Yeni boyutlar
$x_oran = $max_en  / $en;
$y_oran = $max_boy / $boy;

if (($en <= $max_en) and ($boy <= $max_boy)){
$son_en  = $en;
$son_boy = $boy;
}else if (($x_oran * $boy) < $max_boy){
$son_en  = $max_en;
$son_boy = ceil($x_oran * $boy);
}else{
$son_en  = ceil($y_oran * $en);
$son_boy = $max_boy;
}
$new_width = $son_en;
$new_height = $son_boy;

$destimg=ImageCreateTrueColor($new_width,$new_height)or die('Problem In Creating image');
//$bg = imagecolorallocate($destimg, 255, 255, 255);
//imagefill($destimg, 0, 0, $bg);

$srcimg=ImageCreateFromJPEG($prod_img)or die('Problem In opening Source Image');
if(function_exists('imagecopyresampled')){
imagecopyresampled($destimg,$srcimg,0,0,0,0,$new_width,$new_height,ImageSX($srcimg),ImageSY($srcimg) )or die('Problem In resizing');
}else{
Imagecopyresized($destimg,$srcimg,0,0,0,0,$new_width,$new_height,ImageSX($srcimg),ImageSY($srcimg))or die('Problem In resizing');
}

ImageJPEG($destimg,$prod_img_thumb,90)or die('Problem In saving');
imagedestroy($destimg);
}

//Kullanimi
//resize('3.jpg', 600);
?>
Eşşeğin uzun bir yolculuğa çıkmış olması onun at olarak döneceği anlamına gelmez.

sem

Merhabalar arkadaşlar, gözden kaçmış bir çözüldü başlığı yakaladım =) Bu şekilde bildireyim dedim =)
".NET çemberinden geçen lirisist etkisi bir 'Volcano', bir yüzüm Java bir yüzüm Badalamenti Don Tano"
----------------------------------------------------------------------------------------------------------------------
"Her yer ölüm yine, burası dünya
Derken ölüm bile bu nasıl dünya?
Benden ölüm dile, batıyor gün yine
Burası dünya?