0

私のコードは基本的に画像を 219 ピクセル x 127 ピクセルに切り取り、画像をデータベースに保存する必要がありますが、エラーが発生してわかりません。

<?php
if(isset($_POST['btnupload']) && $_FILES['imglogo']['size'] > 0) {


$tmpname = $_FILES['imglogo']['tmp_name'];
$imgsize = $security->secure($_FILES['imglogo']['size']);
$imgtype = $security->secure($_FILES['imglogo']['type']);
$school = $security->secure($_POST['school']);

//crop image
$canvas = imagecreatetruecolor(219,127);
$imgattrib = getimagesize($tmpname);
$source = imagecreatefromjpeg($tmpname);
imagecopyresized($canvas,$source,0,0,0,0,219,127,$imgattrib[0],$imgattrib[1]);

$handle = fopen($tmpname, "r");
$content = fread($handle, filesize($tmpname));
$content = addslashes($content);
fclose($handle);




$save = mysql_query("insert into tbl_school_preview  values(null,'$school','$content','$imgtype','$imgsize')") or die(mysql_error());
//header("Location: school-catalog.php?page=school_preview");
}
?>

エラーは表示されませんが、トリミングは行われていません。何か問題がありますか?

[更新されたコード] 何らかの理由でサムが保存されないブロックの新しい部分です。

if(isset($_POST['btnupload']) && $_FILES['imglogo']['size'] > 0) {

//$filename = $security->secure($_FILES['imgschool']['name']);
$tmpname = $_FILES['imglogo']['tmp_name'];
$imgsize = $security->secure($_FILES['imglogo']['size']);
$imgtype = $security->secure($_FILES['imglogo']['type']);
$school = $security->secure($_POST['school']);

//crop image
$canvas = imagecreatetruecolor(219,127);
$imgattrib = getimagesize($tmpname);
$source = imagecreatefromjpeg($tmpname);
imagecopyresized($canvas,$source,0,0,0,0,219,127,$imgattrib[0],$imgattrib[1]);



$newfile = imagejpeg($canvas,'thumb.jpg',100);

$handle = fopen($newtmpfile, "r");
$content = fread($newtmpfile, filesize($newtmpfile));
$content = addslashes($content);
fclose($handle);




$save = mysql_query("insert into tbl_school_preview values(null,'$school','$content','$imgtype','$imgsize')") or die(mysql_error());
4

3 に答える 3

0

2 つのヒント:

まず第一に、ファイルをファイルシステムに保存しないようにします.ob_start()を使用して、ファイルの内容を取得できます。

ob_start();
imagepng($canvas);
$imageString = ob_get_contents();
ob_end_clean();

$save = mysql_query("
    insert into tbl_school_preview    
    values(null,'$school',$imagestring,'$imgtype','$imgsize')
    ")or die(mysql_error());

サムネイルの品質を向上させるには、imagecopyresampled()も使用します。データベースに挿入するときは、イメージ コードの奇妙な文字に注意してください。

于 2009-07-24T17:40:42.370 に答える
0

画像を保存するために fopen / fwrite を実行する必要はありません。すべてを次のように置き換えます。

$filename = '/path/to/desired/save/location.png'
imagepng($canvas, $filename);

そして、あなたは行く準備ができているはずです。imagepng 関数は、2 番目のパラメーターを指定するとファイルを書き込みます。imagegif と imagejpeg についても同様です。

于 2009-07-21T18:47:24.237 に答える
0

元の画像の内容ではなく、$canvas の内容を保存する必要があります。

imagepngを使用して一時ファイルに出力するか、直接出力ストリームを傍受する必要があります。

ob_start();

imagepng($canvas);

$out = ob_get_contents();

ob_end_clean();

于 2009-07-21T17:45:28.370 に答える