Я использую S3 для хранения изображений, и я изменяю размеры и сжимаю изображения, прежде чем они будут загружены с использованием PHP.Я использую этот класс для хранения изображений в корзину S3 - http://undesigned.org.za/2007/10/22/amazon-s3-php-class
Все это прекрасно работает, если я не выполняю какую-либо обработку файла до его загрузки, потому что он читает загрузку файла из$ _FILES array.
Проблема в том, что я изменяю размеры и сжимаю изображение перед сохранением в корзину S3.Поэтому я больше не могу читать из массива $ _FILES.
Функции для изменения размера:
public function resizeImage($newWidth, $newHeight, $option="auto")
{
// *** Get optimal width and height - based on $option
$optionArray = $this->getDimensions($newWidth, $newHeight, $option);
$optimalWidth = $optionArray['optimalWidth'];
$optimalHeight = $optionArray['optimalHeight'];
// *** Resample - create image canvas of x, y size
$this->imageResized = imagecreatetruecolor($optimalWidth, $optimalHeight);
imagecopyresampled($this->imageResized, $this->image, 0, 0, 0, 0, $optimalWidth, $optimalHeight, $this->width, $this->height);
// *** if option is 'crop', then crop too
if ($option == 'crop') {
$this->crop($optimalWidth, $optimalHeight, $newWidth, $newHeight);
}
}
Сценарий, который я использую для сохранения файла после изменения размера и сжатия влокальный каталог:
public function saveImage($savePath, $imageQuality="100")
{
// *** Get extension
$extension = strrchr($savePath, '.');
$extension = strtolower($extension);
switch($extension)
{
case '.jpg':
case '.jpeg':
if (imagetypes() & IMG_JPG) {
imagejpeg($this->imageResized, $savePath, $imageQuality);
}
break;
case '.gif':
if (imagetypes() & IMG_GIF) {
imagegif($this->imageResized, $savePath);
}
break;
case '.png':
// *** Scale quality from 0-100 to 0-9
$scaleQuality = round(($imageQuality/100) * 9);
// *** Invert quality setting as 0 is best, not 9
$invertScaleQuality = 9 - $scaleQuality;
if (imagetypes() & IMG_PNG) {
imagepng($this->imageResized, $savePath, $invertScaleQuality);
}
break;
// ... etc
default:
// *** No extension - No save.
break;
}
imagedestroy($this->imageResized);
}
с этим PHP-кодом для его вызова:
$resizeObj = new resize("$images_dir/$filename");
$resizeObj -> resizeImage($thumbnail_width, $thumbnail_height, 'crop');
$resizeObj -> saveImage($images_dir."/tb_".$filename, 90);
Как изменить приведенный выше код, чтобы я мог передать его через эту функцию:
$s3->putObjectFile($thefile, "s3bucket", $s3directory, S3::ACL_PUBLIC_READ)