2013-02-18 23 views
0

所以,我有這個類那是半工作。 不知何故,我無法複製上傳圖片的重新尺寸樣本,只有一個黑色的「正確」尺寸的「正方形」(擰上尺寸,只要拇指清晰。時間)。PHP imagecopyresized()充分黑色縮略圖

我的WOT抱歉,但它的駕駛我的Cray Cray公司。 在此先感謝。

<?php 
    class Upload { 
#function from http://stackoverflow.com/a/10666106/587811 
public function resize_values($origWidth,$origHeight,$maxWidth = 200,$maxHeight = 200){ 
    #check for longest side, we'll be seeing that to the max value above 
    if($origHeight > $origWidth){ #if height is more than width 
     $newWidth = ($maxHeight * $origWidth)/$origHeight; 
     $retval = array(width => $newWidth, height => $maxHeight); 
    } 
    else{ 
     $newHeight= ($maxWidth * $origHeight)/$origWidth; 
     $retval = array(width => $origWidth, height => $newHeight); 
} 
    return $retval; 
} 
public function image($picurl, $file, $path="images/uploaded/") { 
    echo "function chamada!"; 
    if ($picurl) { 
     $picFileName=rand(1,9999).$_SESSION['id']; 
     $picExt=substr(strstr($picurl,'.'),1,3); 
     $picExt=strtolower($picExt); 
     $allowed = array("jpg","png","gif","bmp"); 
     if (in_array($picExt,$allowed)) { 
      if (getimagesize($file)) { 
       $picNewName=str_replace(" ","_",$picFileName.'.'.$picExt); 
       $picWhereTo=$path.$picNewName; 
       $copy=move_uploaded_file($file, $picWhereTo);  
       if ($copy) { 

        list($width, $height) = getimagesize($picWhereTo); 
        $size = $this->resize_values($width,$height,250,250); 
        $thumb = imagecreatetruecolor($size['width'],$size['height']); 
    imagealphablending($thumb, false); 
        $source = imagecreatefromjpeg($picWhereTo); 
        imagecopyresized($thumb,$source,0,0,0,0,$size['width'],$size['height'],$width,$height); 
        $picNewName=$picFileName.'_thumb.'.$picExt; 
        imagejpeg($thumb,$path.$picNewName); 

        $picinfo['where']=$picWhereTo; 
        $picinfo['name']=$picNewName; 
        return $picinfo; 
       } 
       else return false; 
      } 
      else return false; 
     } 
     else return false; 
    } 
} 
    } 
    ?> 
+0

而不是使用imagecopyresized使用imagecopy – zamil 2013-02-18 18:52:15

+0

也沒有工作。 – MoshMage 2013-02-18 18:54:34

回答

1

我遇到過類似的問題。這與png的透明度有關。

創建使用imagecreatetruecolor $拇指後給這個一杆();

imagealphablending($thumb, false); 

我不完全確定這是解決方案 - 但我認爲它是沿着正確的軌道。你的真實顏色支持alpha混合 - 它在jpeg的背景中混合 - 它可能會因缺乏信息而感到困惑。

如果這不起作用,請說明確切的圖像格式你上傳的,所以我們可以嘗試一下,看看會發生什麼。

+0

不幸的是,這不是罪魁禍首;我試圖上傳一個非常簡單的圖像,在白色背景(用油漆製作)上提供2個紅色方塊進行測試。我嘗試過使用jpg,png,bmp和真實圖像。 我甚至以爲我沒有GD,所以我'phpinfo'ed',它說我有它。 – MoshMage 2013-02-18 18:50:57

+0

您是否嘗試過替換imagecopyresampled()?我想知道這是不是罪魁禍首,就像你說的那樣;)繼續評論 - 讓我們弄清楚。 – 2013-02-18 19:50:07

+0

我想我已經嘗試過我可以找到的「全部」圖像創建。當我調用createimage函數時,我在想這個問題可能是「文件不在任何地方」。聽起來不可思議,我知道,但我不能找到另一種解釋爲使用'TimThumb.php'作品,我已經涉足的代碼,並具有相同的操作礦井[好,更多特色,但仍] – MoshMage 2013-02-19 15:10:30

1

更改您的

$source = imagecreatefromjpeg($file); 

$source = imagecreatefromjpeg($picWhereTo); 

這就是你如何調用該函數

$objoflclass->image($_FILES['img']['name'],$_FILES['img']['tmp_name'],''); 

其中$ _FILES [ 'IMG']是圖像的名字上傳領域,我相信從這你可以明白是什麼問題

+0

我有以前使用 '$ source = $ picWhereTo' 但結果相同,爲空白圖片。是的, '如果($ picinfo = $ upload->圖像($ _ FILES [ '形象'] [ '名'],$ _ FILES [ '形象'] [ 'tmp_name的值']))' 是我如何打電話它;我不明白。作爲溫度。修復我得到'TimThumb.php'撥打電話 - 一旦我有「時間」將回到它 – MoshMage 2013-02-19 15:05:47

+0

我測試了它的成功,然後只有我建議你改變。它應該工作。 – zamil 2013-02-19 16:02:50

+0

然後我會盡快重新測試,因爲我有機會。 – MoshMage 2013-02-20 12:21:22