使用PHP有效调整图像大小

时间:2012-09-03 18:46:45

标签: php image file-upload amazon-s3

我学会了如何使用9Lessons tutorial在PHP中调整图像大小。而不是将这些已调整大小的文件存储在带宽昂贵的Web服务器上,我想使用S3类将它们上传到我的CDN,S3上的存储桶。

继承我的代码(我删除了所有错误检查和文件处理,请不要评论它只能处理JPEG并且文件可以是任何给定大小等):

<?php

if($_FILES["file"]["name"]) {

    $filename = stripslashes($_FILES['file']['name']);
    $uploadedfile = $_FILES['file']['tmp_name'];
    $src = imagecreatefromjpeg($uploadedfile);

    list($width,$height)=getimagesize($uploadedfile);
    $newwidth=200;
    $newheight=($height/$width)*$newwidth;
    $tmp=imagecreatetruecolor($newwidth,$newheight);

    imagecopyresampled($tmp,$src,0,0,0,0,$newwidth,$newheight,$width,$height);

    $filename = "small/".time().'.'.trim($_FILES['file']['name']);

    if(imagejpeg($tmp,$filename,100)) {
        imagedestroy($src);
        imagedestroy($tmp);
    }

    require('/path/to/S3.php');  

    if (!defined('awsAccessKey')) define('awsAccessKey', '');  
    if (!defined('awsSecretKey')) define('awsSecretKey', '');  

    $s3 = new S3(awsAccessKey, awsSecretKey);

    $put = S3::putObject(
        S3::inputFile($tmp),
        "bucket",
        $uploadFilename,
        S3::ACL_PUBLIC_READ,
        array(),
        array(
            "Cache-Control" => "max-age=315360000",
            "Expires" => gmdate("D, d M Y H:i:s T", strtotime("+5 years"))
        )
    );
    var_dump($put);
}

?>

当我运行此脚本时,S3类会引发一个错误,指出$tmp是资源而不是文件。我知道创建文件需要imagejpeg(),但此时如何将其上传到S3?我是否需要创建图像,将其存储在本地,将其上传到S3然后删除?或者我的问题有更好的解决方案吗?我完全错误地采取了这种方式吗?

1 个答案:

答案 0 :(得分:1)

$put = S3::putObject(
    S3::inputFile($filename), //<- Here changes $tmp for $filename
    "bucket",
    $uploadFilename,
    S3::ACL_PUBLIC_READ,
    array(),
    array(
        "Cache-Control" => "max-age=315360000",
        "Expires" => gmdate("D, d M Y H:i:s T", strtotime("+5 years"))
    )