2012-03-16 15 views
0

は、私はまた、PNG形式のファイルは、白い背景を持ってできるように画像のアップロードにPHPのimagecolorallocate()とimagefill()を使用します(この記事のように:imagescreatetruecolor with a white background):PHP GD複数の画像が白い背景になっています - 警告?

ここ

は、それが関係するコードの一部です

警告:

//create new images 
    $nimgac_0=imagecreatetruecolor($maxw_img0,$maxh_img0); //img1 
    $nimgac_1=imagecreatetruecolor($maxw_img1,$maxh_img1); //img2 
    $nimgac_2=imagecreatetruecolor($maxw_img2,$maxh_img2); //img3 

    $nimgaa_0=imagecolorallocate($nimgac_0,255,255,255); 
    $nimgaa_1=imagecolorallocate($nimgac_1,255,255,255); 
    $nimgaa_2=imagecolorallocate($nimgac_2,255,255,255); 

    $nimga_0=imagefill($nimgac_0,0,0,$nimgaa_0); 
    $nimga_1=imagefill($nimgac_1,0,0,$nimgaa_1); 
    $nimga_2=imagefill($nimgac_2,0,0,$nimgaa_2); 

    //create images from temp folder 
     if ($type=="jpg") { 
      $nimgb_0=imagecreatefromjpeg("../imga/".$_FILES['file']['name']); 
      $nimgb_1=imagecreatefromjpeg("../imga/".$_FILES['file']['name']); 
      $nimgb_2=imagecreatefromjpeg("../imga/".$_FILES['file']['name']); 
     } 

     if ($type=="png") { 
      $nimgb_0=imagecreatefrompng("../imga/".$_FILES['file']['name']); 
      $nimgb_1=imagecreatefrompng("../imga/".$_FILES['file']['name']); 
      $nimgb_2=imagecreatefrompng("../imga/".$_FILES['file']['name']); 
     } 


    imagecopyresized($nimga_0,$nimgb_0,0,0,0,0,$nwidth_0,$nheight_0,$width,$height); 
    imagecopyresized($nimga_1,$nimgb_1,0,0,0,0,$nwidth_1,$nheight_1,$width,$height); 
    imagecopyresized($nimga_2,$nimgb_2,0,0,0,0,$nwidth_2,$nheight_2,$width,$height); 

    imagejpeg($nimga_0,"../imga/".$_FILES['file']['name'],80); 
    imagejpeg($nimga_1,"../imga/".$imgname_1,80); 
    imagejpeg($nimga_2,"../imga/".$imgname_2,80); 

は、私は、この警告を取得)(imagecopyresizedパラメータ1は、ライン上で...与えられたリソース、 ブール値であることを期待114

警告:imagecopyresized()は、パラメータ1は、リソースに与えられ ブールことを期待...ラインで115

警告:imagecopyresized()は、パラメータ1は、リソースに与えられ ブールことを期待...ライン116上

警告:imagejpeg()は、パラメータ1はリソースであることを期待し、 に...ライン117

警告上の所与のブール:imagejpeg()は、パラメータ1はリソースであることを期待し、 に...に与えられたブールライン118

警告:imagejpeg()パラメータ1は、リソース、ブールで を与えることを期待...ラインで119

警告:imagedestroy()は、パラメータ1はリソースであることを期待し、で与えられるブール ...ライン120上

警告:imagedestroy()は、パラメータ1は、ライン上に... 121

警告リソース、 ブールを与えることを期待:パラメータ1リソースことを期待)(imagedestroy、ブール は、で与えられる...ライン上122

immagecolorallocate()およびimagefill()がないコードは完全に正常に動作します。しかし、私は上記の投稿されたコードに何らかのエラーや相違点がありません。

誰でもいいですね。前もって感謝します!

PS:すべての画像をjpgとして保存したいので、pngをjpgに変換しています。

EDIT 3(申し訳ありませんが、私は混乱しました):

print_r(getimagesize($_FILES['file']['tmp_name']));戻り

アレイ([0] => 354 [1] => 332 [2] => 2 [3] = >幅= "354" 高さ= "332" [ビット] => 8 [チャネル] => 3 [MIME] =>画像/ JPEG)

ので、すべてが... if($size['2']==3) {$type="jpg";}

結構です

答えて

1

私はようやく私の問題への答えを見つけたと私はでここにステップそれを投稿する必要があり考えていますもし誰かが同じ問題を抱えていたら、ここで私は考え出したものです:

私のコードには$nimga_0=imagefill($nimgac_0,0,0,$nimgaa_0);がありましたが、imagefillはboolです。ですから、imagefillは成功し、その値1を$ nimga_0に割り当ててから、imagecopyresized($nimga_0,$nimgb_0,0,0,0,0,$nwidth_0,$nheight_0,$width,$height);のリソースとして1を使いたかったのです。

もちろん、これは有効なソースではありません。私は変更しなければならなかったすべてはVARSを除外し、ちょうど行いました:STEP

BY

imagefill($nimgac_0,0,0,$nimgaa_0); 

STEPは、私はその後、

$nimgac_0=imagecreatetruecolor($maxw_img0,$maxh_img0); 

白い色のキャンバスを作成しました

$nimgaa_0=imagecolorallocate($nimgac_0,255,255,255); 
その後、

とは、ちょうどその(今白色)キャンバスにアップロードされた画像をコピー

$nimgb_0=imagecreatefromjpeg("../imga/".$_FILES['file']['name']); 

imagefill($nimgac_0,0,0,$nimgaa_0); 

は、その後、私はアップロードされた画像をコピーして使用した色でキャンバスを埋めるために持っていた

imagecopyresized($nimgac_0,$nimgb_0,0,0,0,0,$nwidth_0,$nheight_0,$width,$height); 

とJPGとして保存

imagejpeg($nimgac_0,"../imga/".$_FILES['file']['name'],80); 

し、最終的に

imagedestroy($nimgac_0); 

キャッシュをクリアし、それはあまりにも他の誰かを役に立てば幸い:)

1

"ブール値が与えられました"通常操作が失敗したことを意味し、GDハンドルを返す代わりに、真偽値が返されます。その後、この偽の値を別のGDコールの別の場所で使用し、その警告を取得します。

そのコード内の行114が何であっても、使用しているGDハンドルがどこにあるのか把握してから、そのハンドルを生成したはずの操作が偽の値を生成した理由を理解してください。


OKは、以下のコメントから出ているもので、ここにあなたの問題です:

$size = getimagesize($_FILES[ blah blah blah]); 

は配列を返します。次に、この配列とintとを比較します:

$size == 2 

これは失敗します。 $ typeは空白になります。つまり、imagecreatefromXXX()関数のNONEが呼び出され、$ nimgb_XXXイメージハンドルが定義されることはありません。

しかし、未定義のハンドル変数をさまざまな他のGD関数に渡すと、警告が表示されます。 PHPがこれらの変数に入れた値のような自動作成nullは、GDライブラリによってFALSEとして報告されています。

あなたのコードは次のようになります。

$info = getimagesize(...); 
switch($info['type']) { 
    case IMGTYPE_JPG: 
     $nimgb_0=imagecreatefromjpeg("../imga/".$_FILES['file']['name']); 
     $nimgb_1=imagecreatefromjpeg("../imga/".$_FILES['file']['name']); 
     $nimgb_2=imagecreatefromjpeg("../imga/".$_FILES['file']['name']); 
     break; 
    case IMGTYPE_PNG: 
     etc.... 
    default: 
     die("Unsupported file type"); 
} 

IMGTYPE _...定数はここに記載されています:http://php.net/manual/en/image.constants.php

+0

あなたにマークをありがとう、それは)imagecopyresized(と行です。私がimage allocateとimagefillを使わないと警告が出ないので、私はそれがイメージであるべきだと思った? – Chris

+0

これは警告が発生する場所ですが、以前のGD呼び出しが失敗して偽の値を返したときに、実際の問題が以前に発生しました。あなたはコピーアウトされた議論のどれがそれを引き起こしているのか(src img、dst img、etc ...)、どれほど偽の値を持っているのかを把握しなければなりません。 –

+0

はい、私はimagecolorallocate()とimagefill()の2つの呼び出しが完全に正常に動作していない同じコードでなければならないと言いました。そう、私はスタックオーバーフローの他の質問を参照しました。私のコードはまさにそこに似ていると思ったが、おそらく私はいくつかのエラーがある...どうすればそれらが失敗する原因を見つけることができますか? – Chris

関連する問題