Я разрабатываю инструмент, позволяющий пользователям загружать различные изображения, он изменяет их размер, если их ширина превышает 1191 пикселя или высота превышает 1684 пикселя.
Я использую cloudinary в качестве CDN для хранения изображений ииспользуйте их API для загрузки и изменения размера изображений с transform
.
. Моя проблема заключается в том, что при загрузке в Cloudinary выдается ошибка тайм-аута (максимум 30 секунд) при загрузке 34 изображений (максимум, которое я позволяюзагрузка за один раз - 100),
Я тестировал, не используя cloudinary, а просто изменение размера изображений занимает 9,8 секунды.
Вот что я использую для изменения размера изображений:
function resizeImage($sourceImage, $targetImage, $maxWidth, $maxHeight) {
// Obtain image from given source file.
if (!$image = @imagecreatefromjpeg($sourceImage))
{
return false;
}
// Get dimensions of source image.
list($origWidth, $origHeight) = getimagesize($sourceImage);
if ($maxWidth == 0)
{
$maxWidth = $origWidth;
}
if ($maxHeight == 0)
{
$maxHeight = $origHeight;
}
// Calculate ratio of desired maximum sizes and original sizes.
$widthRatio = $maxWidth / $origWidth;
$heightRatio = $maxHeight / $origHeight;
// Ratio used for calculating new image dimensions.
$ratio = min($widthRatio, $heightRatio);
$newWidth = (int)$origWidth * $ratio;
$newHeight = (int)$origHeight * $ratio;
// if image size is less than allowed then don't resize
if($origWidth < $maxWidth) {
$newWidth = (int)$origWidth;
}
if($origHeight < $maxHeight) {
$newHeight = (int)$origHeight;
}
$size = array(
'width' => $newWidth,
'height' => $newHeight
);
return $size;
}
Вот что я использую для загрузки в cloudinary:
foreach($image_list as $key => $imgs) {
// resize image
$image_resize = resizeImage($images['tmp_name'][$key], $targetImage, 1191, 1684);
// upload image
$target_dir = "chapters/90/".$title."/".$chapter_num."/"; // directory
$upload = $dbconn->upload($target_dir,basename($images['name'][$key]),$images['tmp_name'][$key],$image_resize['width'],$image_resize['height']);
// insert into database to sort images
$data_images = array(
'id_manga' => $id_manga,
'id_chapter' => $id_chapter,
'id_user' => $id_user,
'url' => $upload['secure_url'],
'page_num' => $i
);
$sql_img = "INSERT INTO pages_sort (id_manga,id_chapter,id_user,url,page_num) values(:id_manga,:id_chapter,:id_user,:url,:page_num)";
$insert_img = $dbconn->execute($sql_img,$data_images);
}
Функция загрузки:
function upload($target_dir,$fileName,$tmp_fileName,$width = '',$height = '') {
require"upload_func/vendor/autoload.php";
require"upload_func/config.php";
$width = (int)$width;
$height = (int)$height;
// upload image
if(empty($width) && empty($height)) {
$this->upload = \Cloudinary\Uploader::upload($tmp_fileName,array("public_id" => $target_dir."/".$fileName));
} else {
$this->upload = \Cloudinary\Uploader::upload($tmp_fileName,array(
"public_id" => $target_dir."/".$fileName,
"transformation"=> array(
array(
"width"=> $width,
"height"=> $height
)
)
));
}
return $this->upload;
}
Я мог бы попытаться изменить максимальное время выполнения, но я хотел бы попытатьсяоптимизировать процесс.
Спасибо за помощь:).