NASIL YAPILIR? Dynamic item boxs - image functions

arcface

Âyinesi iştir kişinin lafa bakılmaz
Kayıtlı Kullanıcı
Katılım
25 Eyl 2020
Mesajlar
216
Tepkime puanı
162
Puanları
48
Konum
istanbul
Web sitesi
www.arcface.net
Merhabalar,
Dinamik eşya kutuları zamanında metin 2 adlı oyun için market sistemi yazarken kodladığım bir şey metin 2 adlı oyunda genişliği 32px uzunluğu da 32,64,96 şekilde 3 tip eşya vardı. Ve bu eşyalar sürekli değişse de boyutları asla değişmezdi. Market sisteminde dinamik şekilde bunları gösterebileceğim bir şey yapma kararı aldım bende böylece sürekli tek tek hazırlamak zorunda kalmayacaktım.

Kısaca şu şekilde işliyor 4 tip parametre gönderiyorsunuz bunlar: tema,item,width ve height şeklinde bunlar şu işe yarıyor tema eşya'nın arka planda görüneceği kaplamayı dahil ediyor item eşyayı temsil ediyor width ve height'da bu eşyaların boyutlarını temsil ediyor.

Şimdi bu ne işimize yarayacak diyebilirsiniz ama bunu sadece ihtiyacınız olduğun da anlayabilirsiniz. Okuyun zamanı gelince ben böyle bir şey görmüştüm deyip geri döneceksiniz. Mantığı anladıktan sonra kendinize göre yapıyı değiştirirsiniz.

Şimdi bu sistem dinamik olduğu için manuel elle bir şey girilmiyor veritabanından gelen bilgiye göre otomatik olarak oluşuyor ama söyle bir görüntü kötü olacağından
index.php?tema=2&item=00010&width=32&height=64
htaccess ile bir görsel formatı olarak göstermeyi tercih ettim oda şu şekilde
2-00010-32-64.jpg
Zaten sistemin amacı dinamik olması ve eşyalar için bir kutu çıktısı vermesi görsel anlamda.

Şimdi anlamaniz için bir kaç görsel bırakacağım İlk olarak eşyaların bulunduğu bir klasör olmalı bu eşyalar ürünlerde olabilir ben oyun üzerine kurguladım o amaçla kullanacağım için siz ne amaçla kullanacak iseniz ona göre yapıyı kurgularsınız.

1601036914643.png
İkinci olarak bir tema klasörü gerekiyor bu tema da arka planı temsil ediyor
1601037049785.png
Gereksinimler bu kadar bundan sonra dosya ya istek atıyorsunuz

örneğin 16 numaralı temayı kullanacaksınız ve 9011 numaralı eşyayı dahil edeceksiniz

16-9011-32-64.jpg

1601037267609.png

mantığı anladığınızı düşünüyorum eğer bir hata olur da olmayan bir tema girer veya olmayan bir eşya o zaman'da tema ve eşya klasöründe bulunan default değerleri devreye girer

Ben bunu kampanyalı ürünlerde özel arka plan seçebilmeleri etkinliklerde, oyun içi eventler de kısaca her türlü olay da özel bir arka plan ile ürünleri sunabilmeleri için kodladım sizin de ister benzer bir durum da ister farklı bir durum da kullanabilirsiniz. Çıktıyı görsel olarak veriyorum isterlerse indirip kaydedebilirler.

Bu arada xenforo'nun eklediğiniz görsellere otomatik logo yerleştirmesi de bu mantığa dayanıyor bunu da ek bilgi olarak belirteyim dedim.

Örnekte kullanılan görseller ve dosyalar için :

Veya bir şey indirmeyi sevmeyenler için sadece kaynak kodu:
Bu altta verdiğim htaccess için link kısaltma da kullanacağın kod.
Kod:
RewriteEngine On
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f

RewriteRule ^([0-9a-zA-Z]+)-([0-9a-zA-Z]+)-([0-9a-zA-Z]+)-([0-9a-zA-Z]+).jpg$ index.php?tema=$1&item=$2&width=$3&height=$4

Bu ise php dosyanızda kullanacağınız kod eğer sadece kodları aldı iseniz bg ve item adlı klasör oluşturmayı unutmayın.
PHP:
<?php
Header("Content-type: image/png");

if($_GET){
    $helperDirBg = __DIR__.'/bg';
    $helperDirItem = __DIR__.'/item';
    $filebg = htmlspecialchars($_GET['tema']);
    $fileitem = htmlspecialchars($_GET['item']);
    $width = htmlspecialchars($_GET['width']);
    $height = htmlspecialchars($_GET['height']);
  
    if ($filebg && is_file($helperDirBg . '/' . $filebg.'.png')){
        $tema = htmlspecialchars($_GET['tema']);
    }
    else{
        $tema = 'default';
    }

    if ($fileitem && is_file($helperDirItem . '/' . $fileitem.'.png')){
        $item = htmlspecialchars($_GET['item']);
        if (!$width){
            $height = 0; $width = 0;
        }

        if ($height){
            if($item != 'default' && $width == 32 && $height == 32){$ilkdeger = 47;$ikincideger = 47;}
            elseif($item != 'default' && $width == 32 && $height == 64){$ilkdeger = 47;$ikincideger = 31.5;}
            elseif($item != 'default' && $width == 32 && $height == 96){$ilkdeger = 47;$ikincideger = 15.5;}
            else{$height = 64; $width = 64; $ilkdeger = 31.5;$ikincideger = 31.5;}
        }

        else{
            $height = 0; $width = 0; $ilkdeger = 0;$ikincideger = 0;
        }
    }
    else{
        $width= 32;
        $height=32;
        $ilkdeger = 47;
        $ikincideger = 47;
        $item = 'default';
    }



    $bir = imagecreatefrompng($helperDirBg.'/'.$tema.'.png');
    $iki = imagecreatefrompng($helperDirItem.'/'.$item.'.png');
    $toplamWidth = 128;    $buyukHeight = 128;
    $im = imagecreatetruecolor($toplamWidth, $buyukHeight);
    $transparent = imagecolorallocatealpha($im, 255, 255, 255, 0);
    imagefill($im, 0, 0, $transparent);
    imagecopy($im, $bir, -1, -1, 0, 0, 130, 130);
    imagecopy($im, $iki, $ilkdeger, $ikincideger, 0, 0, $width, $height);
    imagepng($im);
    imagedestroy($im);
}
?>
 
Son düzenleme:
5,690Konular
16,885Mesajlar
9,801Kullanıcılar
sgucSon üye
Üst