Я исследовал предыдущие вопросы, такие как этот, чтобы получить ответы, но мне не повезло. Мой код работает нормально, но он загружает исходный размер файла, и я хочу сжать размер файла (например, с 600 КБ до не менее 200 КБ) без изменения исходной высоты и ширины. Я пробовал ответы, полученные из той же проблемы, но вместо этого я получаю размер эскиза (8,0 КБ), а загруженное изображение становится простым черным изображением.
Пожалуйста, помогите мне, как это сделать, используя имеющийся у меня код загрузки изображений. Спасибо заранее!
$allowedExts = array("gif", "jpeg", "jpg", "png");
$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp);
// this assumes that the upload form calls the form file field "file"
$name = $_FILES["file"]["name"];
$type = $_FILES["file"]["type"];
$size = $_FILES["file"]["size"];
$tmp = $_FILES["file"]["tmp_name"];
$error = $_FILES["file"]["error"];
$savepath = "gallery/";
$filelocation = $savepath.$name;
$newfilename = $savepath.$ign;
// Check image file dimensions first and then file size
list($width, $height) = getimagesize($tmp);
if ($width > "800" || $height > "600") {
echo "Error: Image size must be a maximum of 800 x 600 pixels.";
}
else if ($size > 500000) {
echo "Error: Image file must be a maximum of 500KB only.";
}
// This won't upload if there was an error or if the file exists, hence the check
if (!file_exists($filelocation) && $error == 0) {
$album = escape_sql(CleanUp($_POST['album']));
$caption = escape_sql(CleanUp($_POST['caption']));
$privacy = escape_sql(CleanUp($_POST['privacy']));
// echo "The file $filename exists";
// This will overwrite even if the file exists
$temp = explode(".", $_FILES["file"]["name"]);
$newfilename = "gallery/".$album."/".$ign.".".$extension;
move_uploaded_file($tmp,$newfilename);
date_default_timezone_set('Asia/Manila');
$date = date('Y-m-d');
$timestamp = strtotime($date);
mysqli_query($connect, "INSERT INTO `gallery` (`id`,`ign`,`album`,`privacy`,`caption`,`filename`,`timestamp`) VALUES ('','$user','$album','$privacy','$caption','$newfilename','$date')");
echo '<h1>My Photos ❱ <i>Uploaded</i></h1>';
echo '<p>Your photo has been uploaded successfully to the '.$album.' album.</p>';
}
else {
unlink($filelocation);
move_uploaded_file($tmp, $filelocation);
echo '<h1>My Photos ❱ <i>Error</i></h1>';
echo '<p>An error has occurred and your photo was not uploaded to the gallery.';
}
См. Здесь для чистого решения php. stackoverflow.com/a/12557415/5873008
@AlexHowansky, да, нет, потому что это исходный код, который у меня есть. Я не уверен, где разместить код изменения размера или какой код подходит для изменения размера.
Есть множество библиотек, которые позволят вам легко изменять размер.






ffmpeg у меня обычно работает нормально, даже с настройками по умолчанию,
function compressImage(string $imageBinary):string{
$tmph=tmpfile();
$tmpf=stream_get_meta_data($tmph)['uri'];
file_put_contents($tmpf,$imageBinary);
system("ffmpeg -y -i ". escapeshellarg($tmpf). " " . escapeshellarg($tmpf.".jpg"));
$ret=file_get_contents($tmpf.".jpg");
fclose($tmph); // deletes the file, thanks to tmpfile()
unlink($tmpf.".jpg");
return $ret;
}
Я не вижу здесь кода, который пытается изменить размер вообще ...