Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/video/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 使用gd进行图像裁剪,然后上载到db,但不调整大小_Php_Gd - Fatal编程技术网

Php 使用gd进行图像裁剪,然后上载到db,但不调整大小

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

我的代码基本上应该将图像裁剪到219px乘以127px,并将图像保存到数据库中,但我遇到了错误,无法解决它

<?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());