PHP изменил размеры функций изображения и функции загрузки S3 - но как объединить их? - PullRequest
1 голос
/ 12 февраля 2011

Я использую 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)

Ответы [ 2 ]

1 голос
/ 12 февраля 2011

Я не понимаю, что вы имели в виду под переменной $_FILES.Если вы переместите загруженный файл по локальному пути после его редактирования, $_FILES больше не будет вам полезен.

Из того, что я понял из вопроса, я бы сделал новую функцию putImageToServer:

public function putImageToServer($path, $imageQuality) {
    saveImage($path, $imageQuality);
    $s3->putObjectFile($path, "s3bucket", $s3directory, S3::ACL_PUBLIC_READ)

    // Now, if you don't want the file to be on your local directory,
    unlink($path);
}

Однако вы должны либо сделать $s3directory константой, либо переменной экземпляра, чтобы новый метод мог использовать эту переменную.ответ, который вы ищете, я пытался ответить на него, основываясь на том, что я понял из вопроса.

0 голосов
/ 17 февраля 2011

Использовал функцию копирования PHP для сохранения во временный каталог, а затем использовал функцию S3 для чтения из каталога.После завершения загрузки S3 файл удаляется из временного каталога с помощью функции отмены связи.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...