• 05-02-2010, 15:56:41
    #1
    s.a arkadaşlar

    php kodları ile resim üzerine yazı yazdırıp resmin thumbunu oluşturuyorum fakat türkçe karakter hatası veriyor. bunu nasıl düzeltebilirim.

    Thumbnail.class.php
    <?
    class Thumbnail {
        var $quality=75;
        var $output_format='JPG';
        var $jpeg_progressive=0;
        var $allow_enlarge=false;
        var $txt_watermark='';
        var $txt_watermark_color='000000';
        var $txt_watermark_font=8;
        var $txt_watermark_Valing='BOTTOM';
        var $txt_watermark_Haling='RIGHT';
        var $txt_watermark_Hmargin=10;
        var $txt_watermark_Vmargin=10;
        var $bicubic_resample=false;
        var $memory_limit='32M';
        var $max_execution_time='30';
        var $error_msg='';
        var $img;
    
    	function Thumbnail($imgfile) 	{
        	$img_info =  getimagesize( $imgfile );
            //detect image format
            switch( $img_info[2] ){
    	    		case 2:
    	    			//JPEG
    	    			$this->img["format"]="JPEG";
    	    			$this->img["src"] = ImageCreateFromJPEG ($imgfile);
            		break;
    	    		case 3:
    	    			//PNG
    	    			$this->img["format"]="PNG";
    	    			$this->img["src"] = ImageCreateFromPNG ($imgfile);
                        $this->img["des"] =  $this->img["src"];
      	    		break;
    	    		default:
    	                $this->error_msg="Not Supported File";
    	 				return false;
    	    }//case
    		$this->img["x"] = $img_info[0];  //original dimensions
    		$this->img["y"] = $img_info[1];
            $this->img["x_thumb"]= $this->img["x"];  //thumbnail dimensions
            $this->img["y_thumb"]= $this->img["y"];
            $this->img["des"] =  $this->img["src"]; // thumbnail = original
    		return true;
    	}
    
        /**
        *set height for thumbnail
        *@access public
        *@param integer height
        *@return boolean
        **/
    	function size_height($size=100) {
                //height
                $this->img["y_thumb"]=$size;
                if ($this->allow_enlarge==true) {
            	    $this->img["y_thumb"]=$size;
                } else {
                    if ($size < ($this->img["y"])) {
                        $this->img["y_thumb"]=$size;
                    } else {
                        $this->img["y_thumb"]=$this->img["y"];
                    }
    
                }
                if ($this->img["y"]>0) {
                    $this->img["x_thumb"] = ($this->img["y_thumb"]/$this->img["y"])*$this->img["x"];
                } else {
                    $this->error_msg="Invalid size : Y";
                    return false;
                }
    	}
    
    	function size_width($size=100)  {
        	//width
                if ($this->allow_enlarge==true) {
            	    $this->img["x_thumb"]=$size;
                } else {
                    if ( $size < ($this->img["x"])) {
                        $this->img["x_thumb"]=$size;
                    } else {
                        $this->img["x_thumb"]=$this->img["x"];
                    }
    
                }
                if ($this->img["x"]>0) {
                    $this->img["y_thumb"] = ($this->img["x_thumb"]/$this->img["x"])*$this->img["y"];
                } else {
                    $this->error_msg="Invalid size : x";
                    return false;
                }
        }
    
    	function size_auto($size=100)   {
    		//size
    		if ($this->img["x"]>=$this->img["y"]) {
        		$this->size_width($size);
    		} else {
        		$this->size_height($size);
     		}
    	}
    
    	function size($size_x,$size_y)   {
    		//size
    		if ( (($this->img["x"])/$size_x) >=  (($this->img["y"])/$size_y) ) {
        		$this->size_width($size_x);
    		} else {
        		$this->size_height($size_y);
     		}
    	}
    
    	function show() {
    		//show thumb
    		Header("Content-Type: image/".$this->img["format"]);
            if ($this->output_format=="PNG") { //PNG
        	imagePNG($this->img["des"]);
        	} else {
                imageinterlace( $this->img["des"], $this->jpeg_progressive);
             	imageJPEG($this->img["des"],"",$this->quality);
            }
    	}
    
    	function dump() {
    		//dump thumb
    		return $this->img["des"];
    	}
    
    	function save($save="")	{
    		//save thumb
    	    if (empty($save)) {
                $this->error_msg='Not Save File';
                return false;
            }
            if ($this->output_format=="PNG") { //PNG
        	    imagePNG($this->img["des"],"$save");
        	} else {
               imageinterlace( $this->img["des"], $this->jpeg_progressive);
               imageJPEG($this->img["des"],"$save",$this->quality);
            }
            return true;
    	}
    
        function process () {
    
            ini_set('memory_limit',$this->memory_limit);
            ini_set('max_execution_time',$this->max_execution_time);
    
            $X_des =$this->img["x_thumb"];
            $Y_des =$this->img["y_thumb"];
    
       		//if ($this->checkgd2()) {
            $gd_version=$this->gdVersion();
            if ($gd_version>=2) {
            //if (false) {
    
            		$this->img["des"] = ImageCreateTrueColor($X_des,$Y_des);
    
                    if ($this->txt_watermark!='' ) {
                        sscanf($this->txt_watermark_color, "%2x%2x%2x", $red, $green, $blue);
                        $txt_color=imageColorAllocate($this->img["des"] ,$red, $green, $blue);
                    }
    
                    if (!$this->bicubic_resample) {
                        imagecopyresampled ($this->img["des"], $this->img["src"], 0, 0, 0, 0, $X_des, $Y_des, $this->img["x"], $this->img["y"]);
                    } else {
                        $this->imageCopyResampleBicubic($this->img["des"], $this->img["src"], 0, 0, 0, 0, $X_des, $Y_des, $this->img["x"], $this->img["y"]);
                    }
    
                    if ($this->img_watermark!='' && file_exists($this->img_watermark)) {
                        $this->img["watermark"]=ImageCreateFromPNG ($this->img_watermark);
                        $this->img["x_watermark"] =imagesx($this->img["watermark"]);
                        $this->img["y_watermark"] =imagesy($this->img["watermark"]);
                        imagecopyresampled ($this->img["des"], $this->img["watermark"], $this->calc_position_H (), $this->calc_position_V (), 0, 0, $this->img["x_watermark"], $this->img["y_watermark"],$this->img["x_watermark"], $this->img["y_watermark"]);
                    }
    
                    if ($this->txt_watermark!='' ) {
                        imagestring ( $this->img["des"], $this->txt_watermark_font, $this->calc_text_position_H() , $this->calc_text_position_V(), $this->txt_watermark,$txt_color);
                    }
            } else {
             		$this->img["des"] = ImageCreate($X_des,$Y_des);
                    if ($this->txt_watermark!='' ) {
                        sscanf($this->txt_watermark_color, "%2x%2x%2x", $red, $green, $blue);
                        $txt_color=imageColorAllocate($this->img["des"] ,$red, $green, $blue);
                    }
                    // pre copy image, allocating color of water mark, GD < 2 can't resample colors
                    if ($this->img_watermark!='' && file_exists($this->img_watermark)) {
                        $this->img["watermark"]=ImageCreateFromPNG ($this->img_watermark);
                        $this->img["x_watermark"] =imagesx($this->img["watermark"]);
                        $this->img["y_watermark"] =imagesy($this->img["watermark"]);
                        imagecopy ($this->img["des"], $this->img["watermark"], $this->calc_position_H (), $this->calc_position_V (), 0, 0, $this->img["x_watermark"], $this->img["y_watermark"]);
                    }
                    imagecopyresized ($this->img["des"], $this->img["src"], 0, 0, 0, 0, $X_des, $Y_des, $this->img["x"], $this->img["y"]);
                    @imagecopy ($this->img["des"], $this->img["watermark"], $this->calc_position_H (), $this->calc_position_V (), 0, 0, $this->img["x_watermark"], $this->img["y_watermark"]);
                    if ($this->txt_watermark!='' ) {
                        imagestring ( $this->img["des"], $this->txt_watermark_font, $this->calc_text_position_H() , $this->calc_text_position_V(), $this->txt_watermark, $txt_color); // $this->txt_watermark_color);
                    }
            }
            $this->img["src"]=$this->img["des"];
            $this->img["x"]= $this->img["x_thumb"];  
            $this->img["y"]= $this->img["y_thumb"];
    
        }
    
        /**
        *Calculate JPEG quality factor for a specific size in bytes
        *@access public
        *@param integer maximun file size in bytes
        **/
        function CalculateQFactor($size)  {
            //based on: JPEGReducer class version 1,  25 November 2004,  Author: huda m elmatsani, Email :justhuda@netscape.net
    
            //calculate size of each image. 75%, 50%, and 25% quality
            ob_start(); imagejpeg($this->img["des"],'',75);  $buffer = ob_get_contents(); ob_end_clean();
            $size75 = strlen($buffer);
            ob_start(); imagejpeg($this->img["des"],'',50);  $buffer = ob_get_contents(); ob_end_clean();
            $size50 = strlen($buffer);
            ob_start(); imagejpeg($this->img["des"],'',25);  $buffer = ob_get_contents(); ob_end_clean();
            $size25 = strlen($buffer);
    
            //calculate gradient of size reduction by quality
            $mgrad1 = 25/($size50-$size25);
            $mgrad2 = 25/($size75-$size50);
            $mgrad3 = 50/($size75-$size25);
            $mgrad  = ($mgrad1+$mgrad2+$mgrad3)/3;
            //result of approx. quality factor for expected size
            $q_factor=round($mgrad*($size-$size50)+50);
    
            if ($q_factor<25) {
                $this->quality=25;
            } elseif ($q_factor>100) {
                $this->quality=100;
            } else {
                $this->quality=$q_factor;
            }
        }
    
        /**
        *@access private
        *@return integer
        **/
        function calc_text_position_H () {
            $W_mark =  imagefontwidth  ($this->txt_watermark_font)*strlen($this->txt_watermark);
            $W = $this->img["x_thumb"];
            switch ($this->txt_watermark_Haling) {
                 case 'CENTER':
                     $x = $W/2-$W_mark/2;
                     break;
                 case 'RIGHT':
                     $x = $W-$W_mark-($this->txt_watermark_Hmargin);
                     break;
                 default:
                 case 'LEFT':
                    $x = 0+($this->txt_watermark_Hmargin);
                     break;
             }
             return $x;
        }
    
        /**
        *@access private
        *@return integer
        **/
        function calc_text_position_V () {
            $H_mark = imagefontheight ($this->txt_watermark_font);
            $H = $this->img["y_thumb"];
            switch ($this->txt_watermark_Valing) {
                 case 'CENTER':
                     $y = $H/2-$H_mark/2;
                     break;
                 case 'BOTTOM':
                     $y = $H-$H_mark-($this->txt_watermark_Vmargin);
                     break;
                 default:
                 case 'TOP':
                    $y = 0+($this->txt_watermark_Vmargin);
                     break;
             }
             return $y;
        }
    
        /**
        *@access private
        *@return integer
        **/
        function calc_position_H () {
            $W_mark = $this->img["x_watermark"];
            $W = $this->img["x_thumb"];
            switch ($this->img_watermark_Haling) {
                 case 'CENTER':
                     $x = $W/2-$W_mark/2;
                     break;
                 case 'RIGHT':
                     $x = $W-$W_mark;
                     break;
                 default:
                 case 'LEFT':
                    $x = 0;
                     break;
             }
             return $x;
        }
    
        /**
        *@access private
        *@return integer
        **/
        function calc_position_V () {
            $H_mark = $this->img["y_watermark"];
            $H = $this->img["y_thumb"];
            switch ($this->img_watermark_Valing) {
                 case 'CENTER':
                     $y = $H/2-$H_mark/2;
                     break;
                 case 'BOTTOM':
                     $y = $H-$H_mark;
                     break;
                 default:
                 case 'TOP':
                    $y = 0;
                     break;
             }
             return $y;
        }
    
    
        /**
        *@access private
        *@return boolean
        **/
        function checkgd2(){
            // TEST the GD version
              if (extension_loaded('gd2') && function_exists('imagecreatetruecolor')) {
                return false;
              } else {
                return true;
              }
        }
    
    
        /**
        * Get which version of GD is installed, if any.
        *
        * Returns the version (1 or 2) of the GD extension.
        */
        function gdVersion($user_ver = 0)
        {
           if (! extension_loaded('gd')) { return; }
           static $gd_ver = 0;
           // Just accept the specified setting if it's 1.
           if ($user_ver == 1) { $gd_ver = 1; return 1; }
           // Use the static variable if function was called previously.
           if ($user_ver !=2 && $gd_ver > 0 ) { return $gd_ver; }
           // Use the gd_info() function if possible.
           if (function_exists('gd_info')) {
               $ver_info = gd_info();
               preg_match('/\d/', $ver_info['GD Version'], $match);
               $gd_ver = $match[0];
               return $match[0];
           }
           // If phpinfo() is disabled use a specified / fail-safe choice...
           if (preg_match('/phpinfo/', ini_get('disable_functions'))) {
               if ($user_ver == 2) {
                   $gd_ver = 2;
                   return 2;
               } else {
                   $gd_ver = 1;
                   return 1;
               }
           }
           // ...otherwise use phpinfo().
           ob_start();
           phpinfo(8);
           $info = ob_get_contents();
           ob_end_clean();
           $info = stristr($info, 'gd version');
           preg_match('/\d/', $info, $match);
           $gd_ver = $match[0];
           return $match[0];
        } // End gdVersion()
    
        function imageCopyResampleBicubic($dst_img, $src_img, $dst_x, $dst_y, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h) {
          $scaleX = ($src_w - 1) / $dst_w;
          $scaleY = ($src_h - 1) / $dst_h;
          $scaleX2 = $scaleX / 2.0;
          $scaleY2 = $scaleY / 2.0;
          $tc = imageistruecolor($src_img);
    
          for ($y = $src_y; $y < $src_y + $dst_h; $y++) {
           $sY  = $y * $scaleY;
           $siY  = (int) $sY;
           $siY2 = (int) $sY + $scaleY2;
    
           for ($x = $src_x; $x < $src_x + $dst_w; $x++) {
             $sX  = $x * $scaleX;
             $siX  = (int) $sX;
             $siX2 = (int) $sX + $scaleX2;
    
             if ($tc) {
               $c1 = imagecolorat($src_img, $siX, $siY2);
               $c2 = imagecolorat($src_img, $siX, $siY);
               $c3 = imagecolorat($src_img, $siX2, $siY2);
               $c4 = imagecolorat($src_img, $siX2, $siY);
    
               $r = (($c1 + $c2 + $c3 + $c4) >> 2) & 0xFF0000;
               $g = ((($c1 & 0xFF00) + ($c2 & 0xFF00) + ($c3 & 0xFF00) + ($c4 & 0xFF00)) >> 2) & 0xFF00;
               $b = ((($c1 & 0xFF)  + ($c2 & 0xFF)  + ($c3 & 0xFF)  + ($c4 & 0xFF))  >> 2);
    
               imagesetpixel($dst_img, $dst_x + $x - $src_x, $dst_y + $y - $src_y, $r+$g+$b);
             }  else {
               $c1 = imagecolorsforindex($src_img, imagecolorat($src_img, $siX, $siY2));
               $c2 = imagecolorsforindex($src_img, imagecolorat($src_img, $siX, $siY));
               $c3 = imagecolorsforindex($src_img, imagecolorat($src_img, $siX2, $siY2));
               $c4 = imagecolorsforindex($src_img, imagecolorat($src_img, $siX2, $siY));
    
               $r = ($c1['red']  + $c2['red']  + $c3['red']  + $c4['red']  ) << 14;
               $g = ($c1['green'] + $c2['green'] + $c3['green'] + $c4['green']) << 6;
               $b = ($c1['blue']  + $c2['blue']  + $c3['blue']  + $c4['blue'] ) >> 2;
    
               imagesetpixel($dst_img, $dst_x + $x - $src_x, $dst_y + $y - $src_y, $r+$g+$b);
             }
           }
          }
        }
    
        /**
        *generate a unique filename in a directory like prefix_filename_randon.ext
        *@access public
        *@param string path of the destination dir. Example '/img'
        *@param string name of the file to save. Example 'my_foto.jpg'
        *@param string [optional] prefix of the name Example 'picture'
        *@return string full path of the file to save. Exmaple '/img/picture_my_foto_94949.jpg'
        **/
        function unique_filename ( $archive_dir , $filename , $file_prefix='') {
        	// checkemaos if file exists
        	$extension= strtolower( substr( strrchr($filename, ".") ,1) );
        	$name=str_replace(".".$extension,'',$filename);
    
        	//	only alfanumerics characters
        	$string_tmp = $name;
        	$name='';
        	while ($string_tmp!='') {
        		$character=substr ($string_tmp, 0, 1);
        		$string_tmp=substr ($string_tmp, 1);
        		if (eregi("[abcdefghijklmnopqrstuvwxyzçöşğüÜĞŞÖÇİıI]", $character)) {
        			$name=$name.$character;
        		} else {
        			$name=$name.'_';
        		}
    
        	}
    
        	$destination = $file_prefix."_".$name.".".$extension;
    
        	while (file_exists($archive_dir."/".$destination)) {
        		// if exist, add a random number to the file name
        		srand((double)microtime()*1000000); // random number inizializzation
        		$destination = $file_prefix."_".$name."_".rand(0,999999999).".".$extension;
        	}
    
    
        	return ($destination);
        }
    
    
    
            /**
            * NOT USED : to do: mezclar imagenes a tamaño original, preservar canal alpha y redimensionar
            * Merge multiple images and keep transparency
            * $i is and array of the images to be merged:
            * $i[1] will be overlayed over $i[0]
            * $i[2] will be overlayed over that
            * @param mixed
            * @retrun mixed the function returns the resulting image ready for saving
            **/
            function imagemergealpha($i) {
    
             //create a new image
             $s = imagecreatetruecolor(imagesx($i[0]),imagesy($i[1]));
    
             //merge all images
             imagealphablending($s,true);
             $z = $i;
             while($d = each($z)) {
              imagecopy($s,$d[1],0,0,0,0,imagesx($d[1]),imagesy($d[1]));
             }
    
             //restore the transparency
             imagealphablending($s,false);
             $w = imagesx($s);
             $h = imagesy($s);
             for($x=0;$x<$w;$x++) {
              for($y=0;$y<$h;$y++) {
               $c = imagecolorat($s,$x,$y);
               $c = imagecolorsforindex($s,$c);
               $z = $i;
               $t = 0;
               while($d = each($z)) {
               $ta = imagecolorat($d[1],$x,$y);
               $ta = imagecolorsforindex($d[1],$ta);
               $t += 127-$ta['alpha'];
               }
               $t = ($t > 127) ? 127 : $t;
               $t = 127-$t;
               $c = imagecolorallocatealpha($s,$c['red'],$c['green'],$c['blue'],$t);
               imagesetpixel($s,$x,$y,$c);
              }
             }
             imagesavealpha($s,true);
             return $s;
            }
    }
    ?>
    index.php dosyası:
    <?php
    include ('Thumbnail.class.php');
    $thumb=new Thumbnail("source.jpg");	        // Contructor and set source image file
    $thumb->txt_watermark='ÇÖŞĞÜ';	    // [OPTIONAL] set watermark source file, only PNG format [RECOMENDED ONLY WITH GD 2 ]
    $thumb->size(650,650);
    $thumb->process();   				        // generate image
    $filename=$thumb->unique_filename ( '.' , 'sample.jpg' , 'thumb');  // generate unique filename
    $status=$thumb->save($filename);            // save your thumbnail to file
    if ($status) {
        echo('Thumbnail save as '.$filename);
    } else {
        echo('ERROR: '.$thumb->error_msg);
    }
    ?>
    yardımcı olursanız sevinirim.
  • 05-02-2010, 16:37:15
    #2
    Üyeliği durduruldu
    turkce karakterleri gorebilmek için turkce karakter içeren truetype bir font kullanmanız lazım

    sınıf buna musait değil phpde truetype ve systemstring fonksiyonları biribirnden bağımsız 2 fonksiyon olduğu için

    sınıfı şu şekilde değiştirmeniz lazım
    <? 
    <? 
    class Thumbnail { 
        var $quality=75;
        var $truetype=false; 
        var $output_format='JPG'; 
        var $jpeg_progressive=0; 
        var $allow_enlarge=false; 
        var $txt_watermark=''; 
        var $txt_watermark_color='000000'; 
        var $txt_watermark_font=8; 
        var $txt_watermark_Valing='BOTTOM'; 
        var $txt_watermark_Haling='RIGHT'; 
        var $txt_watermark_Hmargin=10; 
        var $txt_watermark_Vmargin=10; 
        var $bicubic_resample=false; 
        var $memory_limit='32M'; 
        var $max_execution_time='30'; 
        var $error_msg=''; 
        var $img; 
    
        function Thumbnail($imgfile)     { 
            $img_info =  getimagesize( $imgfile ); 
            //detect image format 
            switch( $img_info[2] ){ 
                    case 2: 
                        //JPEG 
                        $this->img["format"]="JPEG"; 
                        $this->img["src"] = ImageCreateFromJPEG ($imgfile); 
                    break; 
                    case 3: 
                        //PNG 
                        $this->img["format"]="PNG"; 
                        $this->img["src"] = ImageCreateFromPNG ($imgfile); 
                        $this->img["des"] =  $this->img["src"]; 
                      break; 
                    default: 
                        $this->error_msg="Not Supported File"; 
                         return false; 
            }//case 
            $this->img["x"] = $img_info[0];  //original dimensions 
            $this->img["y"] = $img_info[1]; 
            $this->img["x_thumb"]= $this->img["x"];  //thumbnail dimensions 
            $this->img["y_thumb"]= $this->img["y"]; 
            $this->img["des"] =  $this->img["src"]; // thumbnail = original 
            return true; 
        } 
    
        /** 
        *set height for thumbnail 
        *@access public 
        *@param integer height 
        *@return boolean 
        **/ 
        function size_height($size=100) { 
                //height 
                $this->img["y_thumb"]=$size; 
                if ($this->allow_enlarge==true) { 
                    $this->img["y_thumb"]=$size; 
                } else { 
                    if ($size < ($this->img["y"])) { 
                        $this->img["y_thumb"]=$size; 
                    } else { 
                        $this->img["y_thumb"]=$this->img["y"]; 
                    } 
    
                } 
                if ($this->img["y"]>0) { 
                    $this->img["x_thumb"] = ($this->img["y_thumb"]/$this->img["y"])*$this->img["x"]; 
                } else { 
                    $this->error_msg="Invalid size : Y"; 
                    return false; 
                } 
        } 
    
        function size_width($size=100)  { 
            //width 
                if ($this->allow_enlarge==true) { 
                    $this->img["x_thumb"]=$size; 
                } else { 
                    if ( $size < ($this->img["x"])) { 
                        $this->img["x_thumb"]=$size; 
                    } else { 
                        $this->img["x_thumb"]=$this->img["x"]; 
                    } 
    
                } 
                if ($this->img["x"]>0) { 
                    $this->img["y_thumb"] = ($this->img["x_thumb"]/$this->img["x"])*$this->img["y"]; 
                } else { 
                    $this->error_msg="Invalid size : x"; 
                    return false; 
                } 
        } 
    
        function size_auto($size=100)   { 
            //size 
            if ($this->img["x"]>=$this->img["y"]) { 
                $this->size_width($size); 
            } else { 
                $this->size_height($size); 
             } 
        } 
    
        function size($size_x,$size_y)   { 
            //size 
            if ( (($this->img["x"])/$size_x) >=  (($this->img["y"])/$size_y) ) { 
                $this->size_width($size_x); 
            } else { 
                $this->size_height($size_y); 
             } 
        } 
    
        function show() { 
            //show thumb 
            Header("Content-Type: image/".$this->img["format"]); 
            if ($this->output_format=="PNG") { //PNG 
            imagePNG($this->img["des"]); 
            } else { 
                imageinterlace( $this->img["des"], $this->jpeg_progressive); 
                 imageJPEG($this->img["des"],"",$this->quality); 
            } 
        } 
    
        function dump() { 
            //dump thumb 
            return $this->img["des"]; 
        } 
    
        function save($save="")    { 
            //save thumb 
            if (empty($save)) { 
                $this->error_msg='Not Save File'; 
                return false; 
            } 
            if ($this->output_format=="PNG") { //PNG 
                imagePNG($this->img["des"],"$save"); 
            } else { 
               imageinterlace( $this->img["des"], $this->jpeg_progressive); 
               imageJPEG($this->img["des"],"$save",$this->quality); 
            } 
            return true; 
        } 
    
        function process () { 
    
            ini_set('memory_limit',$this->memory_limit); 
            ini_set('max_execution_time',$this->max_execution_time); 
    
            $X_des =$this->img["x_thumb"]; 
            $Y_des =$this->img["y_thumb"]; 
    
               //if ($this->checkgd2()) { 
            $gd_version=$this->gdVersion(); 
            if ($gd_version>=2) { 
            //if (false) { 
    
                    $this->img["des"] = ImageCreateTrueColor($X_des,$Y_des); 
    
                    if ($this->txt_watermark!='' ) { 
                        sscanf($this->txt_watermark_color, "%2x%2x%2x", $red, $green, $blue); 
                        $txt_color=imageColorAllocate($this->img["des"] ,$red, $green, $blue); 
                    } 
    
                    if (!$this->bicubic_resample) { 
                        imagecopyresampled ($this->img["des"], $this->img["src"], 0, 0, 0, 0, $X_des, $Y_des, $this->img["x"], $this->img["y"]); 
                    } else { 
                        $this->imageCopyResampleBicubic($this->img["des"], $this->img["src"], 0, 0, 0, 0, $X_des, $Y_des, $this->img["x"], $this->img["y"]); 
                    } 
    
                    if ($this->img_watermark!='' && file_exists($this->img_watermark)) { 
                        $this->img["watermark"]=ImageCreateFromPNG ($this->img_watermark); 
                        $this->img["x_watermark"] =imagesx($this->img["watermark"]); 
                        $this->img["y_watermark"] =imagesy($this->img["watermark"]); 
                        imagecopyresampled ($this->img["des"], $this->img["watermark"], $this->calc_position_H (), $this->calc_position_V (), 0, 0, $this->img["x_watermark"], $this->img["y_watermark"],$this->img["x_watermark"], $this->img["y_watermark"]); 
                    } 
    
                    if ($this->txt_watermark!='') { 
                        if($this->truetype)
                        imagettftext($this->img["des"],$this->txt_watermark_font,0,$this->calc_position_H(),$this->calc_position_V()+$this->txt_watermark_font+1,$txt_color,$this->truetype,$this->txt_watermark);
                        else
                        imagestring ( $this->img["des"], $this->txt_watermark_font, $this->calc_text_position_H() , $this->calc_text_position_V(), $this->txt_watermark,$txt_color); 
                    } 
            } else { 
                     $this->img["des"] = ImageCreate($X_des,$Y_des); 
                    if ($this->txt_watermark!='' ) { 
                        sscanf($this->txt_watermark_color, "%2x%2x%2x", $red, $green, $blue); 
                        $txt_color=imageColorAllocate($this->img["des"] ,$red, $green, $blue); 
                    } 
                    // pre copy image, allocating color of water mark, GD < 2 can't resample colors 
                    if ($this->img_watermark!='' && file_exists($this->img_watermark)) { 
                        $this->img["watermark"]=ImageCreateFromPNG ($this->img_watermark); 
                        $this->img["x_watermark"] =imagesx($this->img["watermark"]); 
                        $this->img["y_watermark"] =imagesy($this->img["watermark"]); 
                        imagecopy ($this->img["des"], $this->img["watermark"], $this->calc_position_H (), $this->calc_position_V (), 0, 0, $this->img["x_watermark"], $this->img["y_watermark"]); 
                    } 
                    imagecopyresized ($this->img["des"], $this->img["src"], 0, 0, 0, 0, $X_des, $Y_des, $this->img["x"], $this->img["y"]); 
                    @imagecopy ($this->img["des"], $this->img["watermark"], $this->calc_position_H (), $this->calc_position_V (), 0, 0, $this->img["x_watermark"], $this->img["y_watermark"]); 
                    if ($this->txt_watermark!='' ) { 
                         if($this->truetype)
                        imagettftext($this->img["des"],$this->txt_watermark_font,0,$this->calc_position_H(),$this->calc_position_V()+$this->txt_watermark_font+1,$txt_color,$this->truetype,$this->txt_watermark);
                        else
                        imagestring ( $this->img["des"], $this->txt_watermark_font, $this->calc_text_position_H() , $this->calc_text_position_V(), $this->txt_watermark, $txt_color); // $this->txt_watermark_color); 
                    } 
            } 
            $this->img["src"]=$this->img["des"]; 
            $this->img["x"]= $this->img["x_thumb"];   
            $this->img["y"]= $this->img["y_thumb"]; 
    
        } 
    
        /** 
        *Calculate JPEG quality factor for a specific size in bytes 
        *@access public 
        *@param integer maximun file size in bytes 
        **/ 
        function CalculateQFactor($size)  { 
            //based on: JPEGReducer class version 1,  25 November 2004,  Author: huda m elmatsani, Email :justhuda@netscape.net 
    
            //calculate size of each image. 75%, 50%, and 25% quality 
            ob_start(); imagejpeg($this->img["des"],'',75);  $buffer = ob_get_contents(); ob_end_clean(); 
            $size75 = strlen($buffer); 
            ob_start(); imagejpeg($this->img["des"],'',50);  $buffer = ob_get_contents(); ob_end_clean(); 
            $size50 = strlen($buffer); 
            ob_start(); imagejpeg($this->img["des"],'',25);  $buffer = ob_get_contents(); ob_end_clean(); 
            $size25 = strlen($buffer); 
    
            //calculate gradient of size reduction by quality 
            $mgrad1 = 25/($size50-$size25); 
            $mgrad2 = 25/($size75-$size50); 
            $mgrad3 = 50/($size75-$size25); 
            $mgrad  = ($mgrad1+$mgrad2+$mgrad3)/3; 
            //result of approx. quality factor for expected size 
            $q_factor=round($mgrad*($size-$size50)+50); 
    
            if ($q_factor<25) { 
                $this->quality=25; 
            } elseif ($q_factor>100) { 
                $this->quality=100; 
            } else { 
                $this->quality=$q_factor; 
            } 
        } 
    
        /** 
        *@access private 
        *@return integer 
        **/ 
        function calc_text_position_H () { 
            $W_mark =  imagefontwidth  ($this->txt_watermark_font)*strlen($this->txt_watermark); 
            $W = $this->img["x_thumb"]; 
            switch ($this->txt_watermark_Haling) { 
                 case 'CENTER': 
                     $x = $W/2-$W_mark/2; 
                     break; 
                 case 'RIGHT': 
                     $x = $W-$W_mark-($this->txt_watermark_Hmargin); 
                     break; 
                 default: 
                 case 'LEFT': 
                    $x = 0+($this->txt_watermark_Hmargin); 
                     break; 
             } 
             return $x; 
        } 
    
        /** 
        *@access private 
        *@return integer 
        **/ 
        function calc_text_position_V () { 
            $H_mark = imagefontheight ($this->txt_watermark_font); 
            $H = $this->img["y_thumb"]; 
            switch ($this->txt_watermark_Valing) { 
                 case 'CENTER': 
                     $y = $H/2-$H_mark/2; 
                     break; 
                 case 'BOTTOM': 
                     $y = $H-$H_mark-($this->txt_watermark_Vmargin); 
                     break; 
                 default: 
                 case 'TOP': 
                    $y = 0+($this->txt_watermark_Vmargin); 
                     break; 
             } 
             return $y; 
        } 
    
        /** 
        *@access private 
        *@return integer 
        **/ 
        function calc_position_H () { 
            $W_mark = $this->img["x_watermark"]; 
            $W = $this->img["x_thumb"]; 
            switch ($this->img_watermark_Haling) { 
                 case 'CENTER': 
                     $x = $W/2-$W_mark/2; 
                     break; 
                 case 'RIGHT': 
                     $x = $W-$W_mark; 
                     break; 
                 default: 
                 case 'LEFT': 
                    $x = 0; 
                     break; 
             } 
             return $x; 
        } 
    
        /** 
        *@access private 
        *@return integer 
        **/ 
        function calc_position_V () { 
            $H_mark = $this->img["y_watermark"]; 
            $H = $this->img["y_thumb"]; 
            switch ($this->img_watermark_Valing) { 
                 case 'CENTER': 
                     $y = $H/2-$H_mark/2; 
                     break; 
                 case 'BOTTOM': 
                     $y = $H-$H_mark; 
                     break; 
                 default: 
                 case 'TOP': 
                    $y = 0; 
                     break; 
             } 
             return $y; 
        } 
    
    
        /** 
        *@access private 
        *@return boolean 
        **/ 
        function checkgd2(){ 
            // TEST the GD version 
              if (extension_loaded('gd2') && function_exists('imagecreatetruecolor')) { 
                return false; 
              } else { 
                return true; 
              } 
        } 
    
    
        /** 
        * Get which version of GD is installed, if any. 
        * 
        * Returns the version (1 or 2) of the GD extension. 
        */ 
        function gdVersion($user_ver = 0) 
        { 
           if (! extension_loaded('gd')) { return; } 
           static $gd_ver = 0; 
           // Just accept the specified setting if it's 1. 
           if ($user_ver == 1) { $gd_ver = 1; return 1; } 
           // Use the static variable if function was called previously. 
           if ($user_ver !=2 && $gd_ver > 0 ) { return $gd_ver; } 
           // Use the gd_info() function if possible. 
           if (function_exists('gd_info')) { 
               $ver_info = gd_info(); 
               preg_match('/\d/', $ver_info['GD Version'], $match); 
               $gd_ver = $match[0]; 
               return $match[0]; 
           } 
           // If phpinfo() is disabled use a specified / fail-safe choice... 
           if (preg_match('/phpinfo/', ini_get('disable_functions'))) { 
               if ($user_ver == 2) { 
                   $gd_ver = 2; 
                   return 2; 
               } else { 
                   $gd_ver = 1; 
                   return 1; 
               } 
           } 
           // ...otherwise use phpinfo(). 
           ob_start(); 
           phpinfo(8); 
           $info = ob_get_contents(); 
           ob_end_clean(); 
           $info = stristr($info, 'gd version'); 
           preg_match('/\d/', $info, $match); 
           $gd_ver = $match[0]; 
           return $match[0]; 
        } // End gdVersion() 
    
        function imageCopyResampleBicubic($dst_img, $src_img, $dst_x, $dst_y, $src_x, $src_y, $dst_w, $dst_h, $src_w, $src_h) { 
          $scaleX = ($src_w - 1) / $dst_w; 
          $scaleY = ($src_h - 1) / $dst_h; 
          $scaleX2 = $scaleX / 2.0; 
          $scaleY2 = $scaleY / 2.0; 
          $tc = imageistruecolor($src_img); 
    
          for ($y = $src_y; $y < $src_y + $dst_h; $y++) { 
           $sY  = $y * $scaleY; 
           $siY  = (int) $sY; 
           $siY2 = (int) $sY + $scaleY2; 
    
           for ($x = $src_x; $x < $src_x + $dst_w; $x++) { 
             $sX  = $x * $scaleX; 
             $siX  = (int) $sX; 
             $siX2 = (int) $sX + $scaleX2; 
    
             if ($tc) { 
               $c1 = imagecolorat($src_img, $siX, $siY2); 
               $c2 = imagecolorat($src_img, $siX, $siY); 
               $c3 = imagecolorat($src_img, $siX2, $siY2); 
               $c4 = imagecolorat($src_img, $siX2, $siY); 
    
               $r = (($c1 + $c2 + $c3 + $c4) >> 2) & 0xFF0000; 
               $g = ((($c1 & 0xFF00) + ($c2 & 0xFF00) + ($c3 & 0xFF00) + ($c4 & 0xFF00)) >> 2) & 0xFF00; 
               $b = ((($c1 & 0xFF)  + ($c2 & 0xFF)  + ($c3 & 0xFF)  + ($c4 & 0xFF))  >> 2); 
    
               imagesetpixel($dst_img, $dst_x + $x - $src_x, $dst_y + $y - $src_y, $r+$g+$b); 
             }  else { 
               $c1 = imagecolorsforindex($src_img, imagecolorat($src_img, $siX, $siY2)); 
               $c2 = imagecolorsforindex($src_img, imagecolorat($src_img, $siX, $siY)); 
               $c3 = imagecolorsforindex($src_img, imagecolorat($src_img, $siX2, $siY2)); 
               $c4 = imagecolorsforindex($src_img, imagecolorat($src_img, $siX2, $siY)); 
    
               $r = ($c1['red']  + $c2['red']  + $c3['red']  + $c4['red']  ) << 14; 
               $g = ($c1['green'] + $c2['green'] + $c3['green'] + $c4['green']) << 6; 
               $b = ($c1['blue']  + $c2['blue']  + $c3['blue']  + $c4['blue'] ) >> 2; 
    
               imagesetpixel($dst_img, $dst_x + $x - $src_x, $dst_y + $y - $src_y, $r+$g+$b); 
             } 
           } 
          } 
        } 
    
        /** 
        *generate a unique filename in a directory like prefix_filename_randon.ext 
        *@access public 
        *@param string path of the destination dir. Example '/img' 
        *@param string name of the file to save. Example 'my_foto.jpg' 
        *@param string [optional] prefix of the name Example 'picture' 
        *@return string full path of the file to save. Exmaple '/img/picture_my_foto_94949.jpg' 
        **/ 
        function unique_filename ( $archive_dir , $filename , $file_prefix='') { 
            // checkemaos if file exists 
            $extension= strtolower( substr( strrchr($filename, ".") ,1) ); 
            $name=str_replace(".".$extension,'',$filename); 
    
            //    only alfanumerics characters 
            $string_tmp = $name; 
            $name=''; 
            while ($string_tmp!='') { 
                $character=substr ($string_tmp, 0, 1); 
                $string_tmp=substr ($string_tmp, 1); 
                if (eregi("[abcdefghijklmnopqrstuvwxyzçöşğüÜĞŞÖÇİıI]", $character)) { 
                    $name=$name.$character; 
                } else { 
                    $name=$name.'_'; 
                } 
    
            } 
    
            $destination = $file_prefix."_".$name.".".$extension; 
    
            while (file_exists($archive_dir."/".$destination)) { 
                // if exist, add a random number to the file name 
                srand((double)microtime()*1000000); // random number inizializzation 
                $destination = $file_prefix."_".$name."_".rand(0,999999999).".".$extension; 
            } 
    
    
            return ($destination); 
        } 
    
    
    
            /** 
            * NOT USED : to do: mezclar imagenes a tamaño original, preservar canal alpha y redimensionar 
            * Merge multiple images and keep transparency 
            * $i is and array of the images to be merged: 
            * $i[1] will be overlayed over $i[0] 
            * $i[2] will be overlayed over that 
            * @param mixed 
            * @retrun mixed the function returns the resulting image ready for saving 
            **/ 
            function imagemergealpha($i) { 
    
             //create a new image 
             $s = imagecreatetruecolor(imagesx($i[0]),imagesy($i[1])); 
    
             //merge all images 
             imagealphablending($s,true); 
             $z = $i; 
             while($d = each($z)) { 
              imagecopy($s,$d[1],0,0,0,0,imagesx($d[1]),imagesy($d[1])); 
             } 
    
             //restore the transparency 
             imagealphablending($s,false); 
             $w = imagesx($s); 
             $h = imagesy($s); 
             for($x=0;$x<$w;$x++) { 
              for($y=0;$y<$h;$y++) { 
               $c = imagecolorat($s,$x,$y); 
               $c = imagecolorsforindex($s,$c); 
               $z = $i; 
               $t = 0; 
               while($d = each($z)) { 
               $ta = imagecolorat($d[1],$x,$y); 
               $ta = imagecolorsforindex($d[1],$ta); 
               $t += 127-$ta['alpha']; 
               } 
               $t = ($t > 127) ? 127 : $t; 
               $t = 127-$t; 
               $c = imagecolorallocatealpha($s,$c['red'],$c['green'],$c['blue'],$t); 
               imagesetpixel($s,$x,$y,$c); 
              } 
             } 
             imagesavealpha($s,true); 
             return $s; 
            } 
    } 
    ?>
    bu da yeni kullanım
    <?php 
    include ('Thumbnail.class.php'); 
    $thumb=new Thumbnail("source.jpg");            // Contructor and set source image file
    
    $thumb->truetype='Arial.ttf';  // Font dosyasının adresi.
    
    $thumb->txt_watermark='ÇÖŞĞÜ';        // [OPTIONAL] set watermark source file, only PNG format [RECOMENDED ONLY WITH GD 2 ] 
    $thumb->size(650,650); 
    $thumb->process();                           // generate image 
    $filename=$thumb->unique_filename ( '.' , 'sample.jpg' , 'thumb');  // generate unique filename 
    $status=$thumb->save($filename);            // save your thumbnail to file 
    if ($status) { 
        echo('Thumbnail save as '.$filename); 
    } else { 
        echo('ERROR: '.$thumb->error_msg); 
    } 
    ?>
  • 05-02-2010, 20:33:07
    #3
    dediğin şekilde değiştirdim fakat bu sefer hiç yazmıyor.
  • 05-02-2010, 21:52:07
    #4
    Üyeliği durduruldu
    fontun adresi doğru mu ? eğer sadece Arial.ttf girdiyseniz Arial.ttf dosyasının classı kullandığınız sayfanın yanında olması gerekiyor.
  • 05-02-2010, 22:06:41
    #5
    Üyeliği durduruldu
    sınıfı yeniledim yukseklik ttf de farklı hesaplanıyo onu düzenledim ilk mesajımdan tekrar alın

    <?php  
     
    $thumb=new Thumbnail("images/bg.png");            // Contructor and set source image file 
    
    $thumb->truetype='arialbd.ttf';  // Font dosyasının adresi. 
    $txt_watermark_font=12; 
    $thumb->txt_watermark='ÇÖŞĞÜ';        // [OPTIONAL] set watermark source file, only PNG format [RECOMENDED ONLY WITH GD 2 ]  
    $thumb->size(650,650);  
    $thumb->process();                           // generate image  
    $filename=$thumb->unique_filename ( '.' , 'sample.jpg' , 'thumb');  // generate unique filename  
    $status=$thumb->save($filename);            // save your thumbnail to file  
    if ($status) {  
        echo('Thumbnail save as '.$filename);  
    } else {  
        echo('ERROR: '.$thumb->error_msg);  
    }  
    ?>
    boyle de denedim ekrana turkce karakterler yazdı
  • 06-02-2010, 00:53:34
    #6
    dediklerini aynen yaptım. aynı dizinde font mevcut fakat yine türkçe karakterler görünmüyor.

    oluşturulan resimi upload ettim.



    kullandığım karakterler: çöşğüıÇÖŞİĞÜ
  • 06-02-2010, 03:25:58
    #7
    Üyeliği durduruldu
    dosyanın charsetini değiştirip dener misiniz.. ben utf8 kodluyorum ve turkce karakterler görünüyor..
  • 07-02-2010, 15:18:35
    #8
    charsetini değiştirince düzeldi.

    tamamdır yardımların için çok sağol D3LLy.
  • 08-03-2010, 19:47:12
    #9
    resimin üzerine yazıyı sağ alt köşeye yazdırmak istiyorum. düzenlemeler olduktan sonra sadece sol üste yazdırıyor. konumunu yeniden ayarlayabilmek için ne yapmalıyım yardımcı olursanız sevinirim..