Сжатие размера файла изображения в PHP

Я исследовал предыдущие вопросы, такие как этот, чтобы получить ответы, но мне не повезло. Мой код работает нормально, но он загружает исходный размер файла, и я хочу сжать размер файла (например, с 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 &#10097; <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 &#10097; <i>Error</i></h1>';
    echo '<p>An error has occurred and your photo was not uploaded to the gallery.';
}

Я не вижу здесь кода, который пытается изменить размер вообще ...

Alex Howansky 23.03.2018 17:05

См. Здесь для чистого решения php. stackoverflow.com/a/12557415/5873008

alistaircol 23.03.2018 17:14

@AlexHowansky, да, нет, потому что это исходный код, который у меня есть. Я не уверен, где разместить код изменения размера или какой код подходит для изменения размера.

Aki 23.03.2018 17:22

Есть множество библиотек, которые позволят вам легко изменять размер.

Andreas 23.03.2018 18:24
Стоит ли изучать PHP в 2026-2027 годах?
Стоит ли изучать PHP в 2026-2027 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Symfony Station Communiqué - 7 июля 2023 г
Symfony Station Communiqué - 7 июля 2023 г
Это коммюнике первоначально появилось на Symfony Station .
Оживление вашего приложения Laravel: Понимание режима обслуживания
Оживление вашего приложения Laravel: Понимание режима обслуживания
Здравствуйте, разработчики! В сегодняшней статье мы рассмотрим важный аспект управления приложениями, который часто упускается из виду в суете...
Установка и настройка Nginx и PHP на Ubuntu-сервере
Установка и настройка Nginx и PHP на Ubuntu-сервере
В этот раз я сделаю руководство по установке и настройке nginx и php на Ubuntu OS.
Коллекции в Laravel более простым способом
Коллекции в Laravel более простым способом
Привет, читатели, сегодня мы узнаем о коллекциях. В Laravel коллекции - это способ манипулировать массивами и играть с массивами данных. Благодаря...
Как установить PHP на Mac
Как установить PHP на Mac
PHP - это популярный язык программирования, который используется для разработки веб-приложений. Если вы используете Mac и хотите разрабатывать...
0
4
94
1

Ответы 1

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;
}

Другие вопросы по теме