Php 使用gd进行图像裁剪,然后上载到db,但不调整大小
我的代码基本上应该将图像裁剪到219px乘以127px,并将图像保存到数据库中,但我遇到了错误,无法解决它Php 使用gd进行图像裁剪,然后上载到db,但不调整大小,php,gd,Php,Gd,我的代码基本上应该将图像裁剪到219px乘以127px,并将图像保存到数据库中,但我遇到了错误,无法解决它 <?php if(isset($_POST['btnupload']) && $_FILES['imglogo']['size'] > 0) { $tmpname = $_FILES['imglogo']['tmp_name']; $imgsize = $security->secure($_FILES['imglogo']['size']); $im
<?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");
}
?>
您应该保存$canvas的内容,而不是原始图像的内容 将其输出到临时文件,或者直接输出流,然后您将不得不截取该流 ob_启动 imagepng$canvas $out=ob\u get\u内容
清洁卫生 保存图像不需要任何fopen/fwrite操作。将所有这些替换为以下内容:
$filename = '/path/to/desired/save/location.png'
imagepng($canvas, $filename);
你应该可以走了。当您给它第二个参数时,imagepng函数将写入该文件。imagegif和imagejpeg也是如此。只有两个提示:
首先,我不想将文件保存到文件系统。。您可以使用来获取文件的内容
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());
也可用于提高缩略图的质量。在插入数据库时,请注意图像代码中的奇怪字符。我遇到了错误,无法找出原因。错误?你能和我们分享一下吗?我有错误&我没有看到任何错误。是哪一个?你得到了什么错误?事实上,我在发布这个威胁时得到了错误,然后我再次查看了代码,发现我只需要删除一些我不再使用的变量。只是忘记了重命名标题。我现在来处理。Thnx你说得对,但是$canvas放在哪里呢?像这样在$handle变量中$handle=fopen$canvas,r;这个iddnt不起作用,我不知道它怎么能抓到这样的图像。如果你不介意的话,你能给我指出一点吗:我正在努力弄清楚,到目前为止,你一定是在保存到一个写保护目录。当前目录。您也可以不使用临时文件。查看更新的答案。我得到的结果如下:$content=addslashesob\u get\u contents;非常感谢,伙计!!!!。。。但是ob_启动和ob_获取内容做什么呢?他们这样做的目的是什么?thnx它们缓冲输出流,直到您进行刷新或清除。不带文件名的imagepng输出到输出流。然后抓取缓冲区的内容并丢弃缓冲区。
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());