这些是我使用 AWS S3 的第一步,因此我的目标是imagick
在上传到 S3 AWS 之前用于操作图像。
我使用此功能调整图像大小和缩放图像(在输出浏览器上完美运行):
function resizeImg($img, $width, $height) {
$i = new Imagick($img);
$gig = $i->getImageGeometry();
// crop the image
if(($gig['width']/$width) < ($gig['height']/$height)) {
$i->cropImage($gig['width'], floor($height * $gig['width'] / $width), 0, (($gig['height'] - ($height * $gig['width'] / $width)) / 2));
} else {
$i->cropImage(ceil($width * $gig['height'] / $height), $gig['height'], (($gig['width'] - ($width * $gig['height'] / $height)) / 2), 0);
}
$i->ThumbnailImage($width, $height, true);
$i->setImageFormat("jpeg");
$i->setImageCompressionQuality(90);
$i->getimageblob(); // I tried it with and without getimageblob
return $i;
}
那是我的尝试,上传到 S3:
$tmpImg = $_FILES['inputImage']['tmp_name'];
$newImgFile = resizeImg($tmpImg, 100, 100);
$s3->putObjectFile($newImgFile, BUCKET_NAME, $newfilename, S3::ACL_PUBLIC_READ);
但我得到这个错误:
警告:S3::inputFile():无法打开输入文件:���� in.....
我做错了什么?
imagick 与 S3 AWS 不兼容吗?
或者,还有更好的方法?
我的下一个目标是将不同的图像大小调整到 S3,例如 100x100、300x300.... 来自同一个输入文件,但当然我必须在第一个目标之前解决。
额外的:
使用这里的解决方案: PHP Imagick:将图像直接写入 Amazon S3?
我得到这个错误:
警告:S3::putObject(): [SignatureDoesNotMatch] 我们计算的请求签名与您提供的签名不匹配。检查您的密钥和签名方法。
如果我这样做:$new = urlencode($new);
或$new = strtolower($new);
...可以上传但不可读!
据我所知,该错误来自那里的多余空格或斜杠
如果它很重要,这里是 S3 中图像的 Url
https->awsCount.xxxx.xxxxx/img.jpg?AWSAccessKeyId=xxxx&Expires=1383787878&Signature=xxxx&x-amz-security-token=AQoDYXdzEGAasAJlJXrt/7FPf84wE9stfgBfEoWaPMDHlubQBlQ6oMY6sNMT4cizkEm9khypHulLB/zJ%2BbqqAErvFBKKs2I9bKDBzrKYKhgRn%2Bta057CZaLougsxHLRGquhd5H26br/Odkq98%2BoDTnfK0LHFa9vYbX6sXDIzCSHcZx4%2B5o0y3cKlxCMsYLqw6wYD1DNjJ%2BHlWWuh%2B6V0FtpbYaErB1XUZfRRZdx3ZPEOvyZxQS7uzP8C3B1nK0wo3uqqSAhn9PPtQt5jrRutYRao2KugxK8TbkZbr/v5NOYSbpc%2BmI2iYYrUjylqgenzf85Avss0CA1GfOzg %2BMs2/TQ7evH7epr09B8Vyd89Gk1XQpVMyrTSvbzDYE8UCcgrUrXgdHTYWdGLVZ%2BBHzft9nHtNhggePD6AXMuIP%2Ba6ZMF