0

だから、私は半分働いているこのクラスを持っています。どういうわけか、アップロードされた画像のサイズ変更されたサンプルをコピーできません。「正しい」寸法の黒い「正方形」のみです(親指がはっきりと見える限り、寸法をねじ込みます。一度に1ステップずつ) )。

WOT については申し訳ありませんが、それは私をドキドキさせています。前もって感謝します。

    <?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;
    }
}
    }
    ?>
4

2 に答える 2

1

私はこのような同様の問題に遭遇しました。これは、透明度のあるpngに関係しています。

imagecreatetruecolor(); を使用して $thumb を作成したら、これを試してみてください。

imagealphablending($thumb, false);

これが解決策であると完全に確信しているわけではありませんが、正しい道に沿っていると思います。あなたの本当の色はアルファブレンディングをサポートしています - そして、それは jpeg から背景にブレンドされています - 情報が不足しているため混乱するかもしれません.

これがうまくいかない場合は、アップロードしようとしている正確な画像形式を説明してください。

于 2013-02-18T18:39:22.867 に答える
1

あなたの

$source = imagecreatefromjpeg($file);

$source = imagecreatefromjpeg($picWhereTo);

そして、これはあなたが関数を呼び出す方法です

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

ここで、$_FILES['img'] は画像アップロード フィールドの名前です。このことから、何が問題だったのかを理解できると思います。

于 2013-02-19T05:41:34.740 に答える