PHP сжать / уменьшить размер данных блоб изображения - PullRequest
0 голосов
/ 10 июня 2018

Я пытаюсь уменьшить размер блобов изображений до 150 КБ

Я сделал php-функцию для этого, однако imagejpeg продолжает выводить данные вместо того, чтобы сохранять их в переменной.

В принципе, кто-нибудь знает, как сжать изображение до 150 КБ или ниже?Потеря качества в порядке.

Он входит как base64.Затем я декодирую его в BLOB и пропускаю через эту функцию.

function compressImageBlob($image_blob, $type, $loop = 0) {

    global $MAX_IMAGE_SIZE;

    $blob_size = strlen($image_blob);
    $loop++;

    if($loop > 10){
        return $image_blob;
    }

    if($blob_size >= $MAX_IMAGE_SIZE){
        $quality = ($MAX_IMAGE_SIZE/$blob_size)*10;

        if($quality >= 100){
            // it should never come here, but just in case
            $quality = 10;
        }

        $img = imagecreatefromstring($image_blob);
        $image_blob = imagejpeg($img, NULL, $quality);
        $image_blob = compressImageBlob($image_blob,$type,$loop);
    }

  return $image_blob;
}

1 Ответ

0 голосов
/ 10 июня 2018

Я не могу сказать, создает ли ваша проблема создание большого двоичного объекта вместо файла или как сжимать.Я предполагаю, что это первое.Я думаю, что вам нужно сделать следующее, чтобы создать BLOB-объект, а не файл:

ob_start();                      // Start output buffering
imagejpeg($img,NULL,$quality);   // Generate JPEG into buffer
$blob=ob_get_contents();         // Load output buffer into $blob var
ob_end_clean();                  // Clean up buffer

Если вы незнакомы, это называется «выходная буферизация» , и есть пример здесь .

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