我想从磁盘上传图片,调整大小,,然后将其上传到Amazon S3。
但是,我无法从imagejpeg()获得正确的图像输出。
继承我的代码:
$sourceUrl = $_FILES['path']['tmp_name'];
$thumbWidth = '100';
$thumbid = uniqid();
$img = imagecreatefromjpeg($sourceUrl);
$width = imagesx( $img );
$height = imagesy( $img );
// calculate thumbnail size
$new_width = $thumbWidth;
$new_height = floor( $height * ( $thumbWidth / $width ) );
// create a new temporary image
$tmp_img = imagecreatetruecolor( $new_width, $new_height );
// copy and resize old image into new image
imagecopyresampled($tmp_img, $img, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
// output the image
imagejpeg($tmp_img);
// upload thumbnail to s3
$s3->putObjectFile($tmp_img, "mybucket", $thumbid, S3::ACL_PUBLIC_READ);
Firebug给了我这个错误:
illegal character
[Break on this error] (�����JFIF���������>CREATOR: g...(using IJG JPEG v62), default quality\n
如果我以这种方式修改imagejpeg,
imagejpeg($tmp_img, 'abc.jpg');
然后我得到同样的错误。 :(
我能在这里得到一些帮助吗?
答案 0 :(得分:3)
如果您查看imagejpeg
的文档,您可以看到它输出图像,这意味着您调用它的方式会被发送到浏览器。您可以通过在第二个参数中传递文件名来将其保存到文件第二种方式。
此外,$tmp_img
是图像资源,而不是即用型图像文件。
我不知道您的上传功能是如何工作的,但是:如果您需要上传文件内容,请执行以下操作:
ob_start();
imagejpeg($tmp_image);
$image_contents = ob_get_clean();
$s3->putObjectFile($image_contents, "mybucket", $thumbid, S3::ACL_PUBLIC_READ);
如果您需要上传文件名:
$filename = tempnam(sys_get_temp_dir(), "foo");
imagejpeg($tmp_image, $filename);
$s3->putObjectFile($filename, "mybucket", $thumbid, S3::ACL_PUBLIC_READ);
答案 1 :(得分:0)
您必须定义标题:
header('Content-type: image/jpeg');
答案 2 :(得分:0)
1)$tmp_img
是资源而不是文件。您可能需要将图像保存到光盘并将其用于putObjectFile
2)你可能需要告诉S3你上传的文件是image / jpeg
答案 3 :(得分:0)
好的伙计们再次非常感谢你,我把它与你的回答结合起来并将其与你的回答结合起来如下:)
$thumbid .= ".jpg";
$img = imagecreatefromgif($sourceUrl);
$width = imagesx( $img );
$height = imagesy( $img );
// calculate thumbnail size
$new_width = $thumbWidth;
$new_height = floor( $height * ( $thumbWidth / $width ) );
// create a new temporary image
$tmp_img = imagecreatetruecolor( $new_width, $new_height );
// copy and resize old image into new image
imagecopyresampled($tmp_img, $img, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
$path = '/var/www/1.4/wwwroot/cdn/'.$thumbid;
// output the image
if(imagegif($tmp_img, $path)){
$thumblink = "";
// upload thumbnail to s3
if($s3->putObjectFile($path, "mybucket", $thumbid, S3::ACL_PUBLIC_READ)){
$thumblink = "http://dtzhqabcdscm.cloudfront.net/".$thumbid;
imagedestroy($tmp_img);
}
return $thumblink;
}