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

只有两个提示:

我首先不会将文件保存到文件系统。您可以使用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 函数将写入文件。imagegif 和 imagejpeg 也是如此。

于 2009-07-21T18:47:24.237 回答
0

您应该保存 $canvas 的内容,而不是原始图像的内容。

使用imagepng将其输出到临时文件,或直接输出流,然后您必须拦截。

ob_start();

图像PNG($画布);

$out = ob_get_contents();

ob_end_clean();

于 2009-07-21T17:45:28.370 回答