2012-04-08 124 views
0

我试图修改此脚本:http://net.tutsplus.com/tutorials/php/image-resizing-made-easy-with-php/白色背景调整图像

我希望得到一个(使用裁剪选项时),白色背景,而不是黑色的,因为它是现在。我的场景是这样的:

当我调整图像的大小时,我会在底部(1px)得到一个我不想要的黑色边框。我希望这是白色的。

我已经看过这个线程,并试图执行它的脚本:How do I fill white background while resize image

但它似乎并不工作。这里是我的调整大小类的代码:

public function resizeImage($newWidth, $newHeight, $option="auto") 
     { 
      // *** Get optimal width and height - based on $option 
      $optionArray = $this->getDimensions($newWidth, $newHeight, $option); 

      $optimalWidth = $optionArray['optimalWidth']; 
      $optimalHeight = $optionArray['optimalHeight']; 


      // *** Resample - create image canvas of x, y size 
      $this->imageResized = imagecreatetruecolor($optimalWidth, $optimalHeight); 

      // MY EDIT STARTS HERE 
      $backgroundColor = imagecolorallocate($this->imageResized, 255, 255, 255); 
      imagefill($this->imageResized, 0, 0, $backgroundColor); 
      // AND STOPS HERE 

      imagecopyresampled($this->imageResized, $this->image, 0, 0, 0, 0, $optimalWidth, $optimalHeight, $this->width, $this->height); 


      // *** if option is 'crop', then crop too 
      if ($option == 'crop') { 
       $this->crop($optimalWidth, $optimalHeight, $newWidth, $newHeight); 
      } 
     } 

我在做什么错,我应该改变什么?

+0

而且没有css? – 2012-04-08 12:29:19

+0

没有设置CSS边框。这只是一些图像获取这个黑底部边界,其他人没有。这是 - 我认为 - 因为他们(没有底部黑色边框)有另一个宽度/高度比例,那么他们谁得到底部边框。 – Fredrik 2012-04-08 13:15:20

回答

0

Lil在赶时间,所以不能写出确切的代码,但我也试图做你喜欢的事情。以下是我的代码。我发表了评论,以方便您。它必须帮助你,但请确认。

在该代码中,我创建一个趋势图像(组在单个图像的多个图像的),其具有白色背景的多个图像

总之,我一个PNG图像作为白色背景。

<?php 
session_start(); 
include_once("../dbfunction.php"); 

$tid=0; 
if(isset($_REQUEST) && isset($_REQUEST['tid'])){ 
    $tid=$_REQUEST['tid']; 
}else{ 
    echo "Trend id not defined"; 
} 

//This return SQL result. Multiple rows with images name, x1, y1 as initial position and x2,y2 as width height 
$data=getTrendImages($tid); 

//This is path of background image. For me, background image is pure white png image (480x480) 
$trendsbgurl= OS_PATH."image".DIRECTORY_SEPARATOR."trends_background.png"; 
//Get image in PHP 
$trendsbg = @imagecreatefrompng($trendsbgurl); 

//Loop to get images and put them on background 
for($i=0;$i<count($data);$i++){ 
    $imgname=$data[$i]['image_name']; 
    $imgleft=$data[$i]['position_x1']; 
    $imgtop=$data[$i]['position_y1']; 
    $imgwidth=$data[$i]['position_x2']; 
    $imgheight=$data[$i]['position_y2']; 

    //Path of source image 
    $imgpath=OS_PATH."original".DIRECTORY_SEPARATOR.$imgname; 
    //Explode image name to get file extension. I'd to support png, gif and jpeg images 
    $file=explode(".",$imgname); 
    $ext=$file[1]; 

    //If source file exist 
    if(file_exists($imgpath)){ 
     //Create source image in PHP 
     $image=null; 
     if($ext=='jpg' || $ext=='jpeg'){ 
      $image = @imagecreatefromjpeg($imgpath); 
     }else if($ext=='png'){ 
      $image = @imagecreatefrompng($imgpath); 
     }else if($ext=='gif'){ 
      $image = @imagecreatefromgif($imgpath); 
     }else{ 
      exit; 
     } 
     $colorTransparent = @imagecolorat($image, 0, 0); 
     //GEt source image size 
     $imgsize=getimagesize($imgpath); 
     //Copy source on background 
     imagecopyresampled($trendsbg, $image, $imgleft, $imgtop, 0, 0, $imgwidth,   $imgheight, $imgsize[0], $imgsize[1]); 
    }else{ 
    } 
} 
//I need to save image on disk. You can do whatever you need to do with $trendsbg 
imagejpeg($trendsbg,OS_PATH."trendimages".DIRECTORY_SEPARATOR."t_".$tid.".jpg",100); 
+0

感谢您的回答。但是,这不正是我在评论之间做的事情:// *** Resample - 创建x,y大小的图像画布并// //在此停止?我参考了编辑过的版本评论,该评论在“===============”之前结束。 – Fredrik 2012-04-08 10:24:11