файл становиться больше

296
19 мая 2017, 17:46

данный фрагмент кода уменьшает расширение изображения, но я сильно удивился увидев что вес новых картинок больше чем их оригинал с более высоки расширением, я так понимаю исходные изображения очень хорошо сжаты, но как средствами php сжать их так же хорошо после того как разрешения уменьшено. Возможно ли это??

foreach($_FILES as $file) { 
  if ($file['size'] < 2000000) { 
    $tmp_name = $file['tmp_name']; 
    $temp = getimagesize($file['tmp_name']); 
    $percent = 0.5; 
    list($width_orig, $height_orig) = $temp; 
    $width = $width_orig * $percent; 
    $height = $height_orig * $percent; 
    $canvas = imagecreatetruecolor($width, $height); 
    imageAlphaBlending($canvas, false); 
    imageSaveAlpha($canvas, true); 
    if ($image_name != "") { 
      $razr = array(); 
      $razr = explode(".", $image_name); 
      $file_extension = end($razr); 
      $file_extension = mb_strToLower($file_extension); 
    } 
 
    function create_newImage($extension, $url) { 
      if ($extension == "jpg") { 
        return imagecreatefromjpeg($url); 
      } 
      if ($extension == "png") { 
        return ImageCreateFromPNG($url); 
      } 
      if ($extension == "gif") { 
        return imagecreatefromgif($url); 
      } 
      return (false); 
    } 
    $new_image = create_newImage($file_extension, $tmp_name); // 
    if ($new_image !== false) { 
      imagecopyresampled($canvas, $new_image, 0, 0, 0, 0, $width, $height, $width_orig, $height_orig); 
      imagepng($canvas, $tmp_name, 0); 
      imagedestroy($canvas); 
    } 
 
    if (move_uploaded_file($file['tmp_name'], $upload.$image_name)) { 
      $files = realpath($upload.$image_name); 
      $answer = "фаил загружен"; 
    } else { 
      $error = true; 
    } 
  } else { 
    $answer = "фаил слишком большой"; 
  } 
}

Answer 1

Последовательные компрессия и декомпрессия JPEG, даже с хорошим параметром качества, например, 0.95, добавляют небольшой шум, потому что это сжатие с потерями. Алгоритм LZ77, используемый в PNG, ничего не знает про смысл JPEG и сжимает распакованные данные JPEG просто как бинарную строку, пытаясь найти в ней некоторую несложную логику. Логику в графическом шуме, не зная его природы, искать бесполезно, потому результат действий

  1. Компрессия JPEG
  2. Декомпрессия JPEG
  3. Любые операции
  4. Компрессия PNG

может оказаться и показаться парадоксальным.

READ ALSO
Сохранить загруженные картинки в php.(FILEUPLOAD)

Сохранить загруженные картинки в php.(FILEUPLOAD)

Здравствуйте форумчанеНужно было сделать простенькую админку в php

336
Bitrix не создан временный каталог для загрузки

Bitrix не создан временный каталог для загрузки

Пытаюсь загрузить на сайт изображение, но bitrix пишет что не создан временный каталог для загрузки

482
Внесение значения в ячейку, PHPExcel

Внесение значения в ячейку, PHPExcel

Доброго времени суток!

318
Как обратиться к значению JSON

Как обратиться к значению JSON

После json_decode имею вот такое массивКак обратиться по ключу и получить значение?

346