有人能告诉我如何解决以下问题:
include('php/resizeImage.php');
if($_POST['uploadlink']){
$url = $_POST['uploadlink'];
$urlImage = file_get_contents($url);
if ($_POST['filename']){
$filename = $_POST['filename'].".jpg";
} else {
$urlinfo = parse_url($url);
$filename = basename($urlinfo['path']);
}
$image = new ResizeImage();
$image->load($filename);
$image->resizeToWidth(300);
$image->save($filename);
file_put_contents("images/upload/".$filename, $urlImage);
}
从URL收到来自file_get_contents的图像数据后,我想通过resizeImage脚本调整它的大小,该脚本将图像的文件名作为参数。
编辑:ResizeImage函数load和resizeToWidth:
function load($filename) {
$image_info = getimagesize($filename);
$this->image_type = $image_info[2];
if( $this->image_type == IMAGETYPE_JPEG ) {
$this->image = imagecreatefromjpeg($filename);
} elseif( $this->image_type == IMAGETYPE_GIF ) {
$this->image = imagecreatefromgif($filename);
} elseif( $this->image_type == IMAGETYPE_PNG ) {
$this->image = imagecreatefrompng($filename);
}
}
function resizeToWidth($width) {
$ratio = $width / $this->getWidth();
$height = $this->getheight() * $ratio;
$this->resize($width,$height);
}
当用户通过input type ='file'选择本地图像时,我可以轻松完成。
if (isset($_FILES["uploadedfile"])){
$ufilename = $_FILES["uploadedfile"]["name"];
$ufiletmpname = $_FILES["uploadedfile"]["tmp_name"];
$image = new ResizeImage();
$image->load($ufiletmpname);
$image->resizeToWidth(300);
$image->save($ufiletmpname);
}
另一个问题: 我将用户名转发到我的脚本,因为我想为每个用户创建一个单独的文件夹,因此他们只能看到自己上传的图像。
$admin = $_GET['admin'];
file_put_contents("images/upload/".$admin."/".$filename, $urlImage);
为什么这对我不起作用?
感谢。
答案 0 :(得分:2)
易。
只需改变你的 ResizeImage类的代码,使其能够操作除文件名之外的图像二进制内容。
你的第二个问题也很简单。
设置PHP安装以使其在屏幕上显示错误(当然,对于开发服务器!),您将看到问题的确切答案,“为什么这对我不起作用?”。
error_reporting(E_ALL);
ini_set('display_errors',1);
通常有帮助 (还要确保您的代码不会执行任何可能隐藏您的错误消息的HTTP重定向)
答案 1 :(得分:1)
什么是ResizeImage?
如果是我,我会这样做:
$data = file_get_contents($name);
$image = imagecreatefromstring($data);
// resize the image
答案 2 :(得分:1)
对于您的第一个问题,ResizeImage是您自己的类,或者您从网上下载的内容。为了帮助您,我们需要看到它。
对于第二部分,file_put_contents不会为您创建目录,为此,您需要使用mkdir函数。