• 06-03-2014, 01:42:40
    #1
    Kimlik doğrulama veya yönetimden onay bekliyor.
    Merhaba,

    Aşağıdaki kod bana site.com/watermark.php?id=uploads/ev.jpg ile çağırırsam resmin orjinal boyutunda ortasına watermark basıp resmimi alıyorum.

    Benim istediğim bu orjinal boyuttaki resim çıktısına benim müdehale edebilmem. Ben daha büyük boyutta çıktı almak istiyorum.

    <?php
    $link = $_GET['id'];
    $nedirbu = getimagesize($link); 
     
    // PHP Düz mantık değil tabi önce bir resmin ne olduğunu kontrol edelim ve ona göre formatı orjinal kalsın.
        switch ($nedirbu['mime']) { 
            case "image/gif": 
            // Gif resimleri es geç.. GD Kütüphanesi veya imagemagick olaydı animasyonları bozmazdık usta.
            $gif = 1;
            break; 
            case "image/jpeg": 
            $damga = imagecreatefrompng('uploads/play.png');
            $foto = imagecreatefromjpeg($link);     
           break; 
            case "image/png": 
            $damga = imagecreatefrompng('uploads/play.png');
            $foto = imagecreatefrompng($link);     
           break; 
        } 
        if(empty($gif))
    {
            // Damganın kenar boşluklarını ayarlayıp resmin yükseklik ve genişliğini alalım
    		$wx = imagesx($foto)/2 - imagesx($damga)/2;
    		$wy = imagesy($foto)/2 - imagesy($damga)/2;
     
            // Damga resmini koordinatları belirterek kenar boşlukları ile birlikte fotoğrafın üzerine kopyalayalım.
            imagecopy($foto, $damga, $wx, $wy, 0, 0, imagesx($damga), imagesy($damga));
     
            // Sonucu çıktılayıp belleği serbest bırakalım.
            header('Content-type: image/png');
    		imagepng($foto);
            imagedestroy($foto);
    }
    else
    {
            // Gif için VIP kapısı..
            header('Content-type: image/gif');
            readfile($link);
    }
    ?>
  • 06-03-2014, 23:50:27
    #2
    yapabilecek yok mu?
  • 06-03-2014, 23:57:46
    #3
    Kimlik doğrulama veya yönetimden onay bekliyor.
    @Lokosit; hazırlıyorum, birazdan eklerim.
  • 07-03-2014, 00:02:03
    #4
    Kimlik doğrulama veya yönetimden onay bekliyor.
    @saintx cevabı yazarken resim manipulasyon işlemleri için Intervention Image kütüphanesini öneririm.
  • 07-03-2014, 00:10:17
    #5
    buna cache de yapabilr miyiz? Her resim çağrılınca tekrar tekrar sunucuyu kasmasa?
  • 07-03-2014, 00:24:09
    #6
    @xuma; kütüphane bulmuştum aslında ama senin dediğinle yapıp vereyim.
    @Lokosit;, @xuma;'nın söylediği kütüphanede önbellekleme vb. işlemler var bunları da uygulayacağım.
  • 07-03-2014, 00:26:29
    #7
    saintx adlı üyeden alıntı: mesajı görüntüle
    @xuma; kütüphane bulmuştum aslında ama senin dediğinle yapıp vereyim.
    @Lokosit;, @xuma;'nın söylediği kütüphanede önbellekleme vb. işlemler var bunları da uygulayacağım.
    valla herkes için güzel bi kod olur. PHP bilgim yok fazla artık işimize yarayacak bi hale dönerse süper olur.
  • 07-03-2014, 02:12:01
    #8
    @Lokosit; Bilgisayarınızda veya sunucunuzda Composer kurulu değilse şu yazımı okumanızı tavsiye ediyorum.

    composer.json;
    {
    	"minimum-stability": "dev",
    	"require": {
    		"imsaintx/utils": "dev-master",
    		"intervention/image": "dev-master",
    		"intervention/imagecache": "dev-master"
    	}
    }
    watermark.php;
    <?php
    	
    	/**
    	 * WM -> WaterMark
    	 * 
    	 * @author: Ogün Karakuş (saintx) <ogunkarakus@superposta.com>
    	 */
    	
    	# Dosyanın çalıştırıldığı dizin
    	define("WM_ABS_PATH", str_replace("\\", "/", dirname(realpath(__FILE__))));
    	# Resimlerin bulunduğu yol
    	define("WM_STORAGE_PATH", WM_ABS_PATH."/../storage/uploads/images");
    	# Watermark dosyası
    	define("WM_WATERMARK_IMAGE_PATH", WM_ABS_PATH."/../storage/watermark.png");
    	# Watermark X koordinatı
    	define("WM_WATERMARK_X_POSITION", 12);
    	# Watermark Y koordinatı
    	define("WM_WATERMARK_Y_POSITION", 12);
    	# Watermark pozisyonu (bottom-right, top-left vs.)
    	define("WM_WATERMARK_ANCHOR", "bottom-right");
    	# Watermark atanan resmin önbellekte kalma süresi (saniye cinsinden)
    	define("WM_WATERMARK_CACHE_TIME", 3600);
    	
    	if(isset($_GET["file"]) === false || empty($_GET["file"]) === true)
    	{
    		# "file" parametresiyle değer gelmediyse işlemi durduralım.
    		exit("Invalid file.");
    	}
    	
    	$file = WM_STORAGE_PATH."/".trim($_GET["file"], "/");
    	
    	if(file_exists($file) === false)
    	{
    		# dosya yoksa işlemi durduralım.
    		exit("Invalid file.");
    	}
    	
    	if(extension_loaded("gd") === false)
    	{
    		# GD yüklü değilse durduralım.
    		exit("PHP GD not installed.");
    	}
    	
    	$supported_image_types = array(IMAGETYPE_GIF, IMAGETYPE_JPEG, IMAGETYPE_PNG);
    	
    	$image_info = getimagesize($file);
    	
    	$image_type = $image_info[2];
    	
    	if(in_array($image_type, $supported_image_types) === false)
    	{
    		# dosya desteklenmiyor.
    		exit("Unsupported file type.");
    	}
    	
    	unset($image_info, $supported_image_types);
    	
    	require(WM_ABS_PATH."/vendor/autoload.php");
    	
    	use \Intervention\Image\Image;
    	use \Tools\Utils;
    	
    	$image = Image::cache(function($image) {
    		global $file;
    		
    		return $image->make($file)->insert(WM_WATERMARK_IMAGE_PATH, WM_WATERMARK_X_POSITION, WM_WATERMARK_Y_POSITION, WM_WATERMARK_ANCHOR);
    	}, WM_WATERMARK_CACHE_TIME, true);
    	
    	Utils::utf8_header($image->mime);
    	
    	exit($image->response());
    Uygulamanın çalışır halini bu bağlantıdan indirebilirsiniz.
  • 07-03-2014, 14:35:16
    #9
    @Lokosit; verdiğim örnekte yeniden boyutlandırma yok, eve geçtiğimde onuda ekleyeceğim.