Как сделать сжатие изображений?

InstantCMS 1.X
#1 6 ноября 2019 в 11:26
Как сделать такое на первой ветке:
Юзер загружает в статью изображение 7000х4000 и весом 15мб, при загрузке система приводит вес и размер по принципу "не больше такого-то веса и размера"?
Что-то нигде не нашел решения.
#2 6 ноября 2019 в 12:45
Олег с клещами, имеете ввиду прикреплённое изображение или вставленное через редактор в тело статьи?
#3 6 ноября 2019 в 21:41
$path2=PATH.'конечный путь.'.jpg';
$path3=PATH.'уменьшенная копия.'.jpg';
$size=GetImageSize ($path2);//Создаём новое изображение из «старого»
$src=ImageCreateFromJPEG ($path2);//Берём числовое значение ширины фотографии, которое мы получили в первой строке и записываем это число в переменную
$iw=$size[0];//Проделываем ту же операцию, что и в предыдущей строке, но только уже с высотой.
$ih=$size[1];//Ширину фотографии делим на 200 т.к. на выходе мы хотим получить фото шириной в 200 пикселей. В результате получаем коэфициент соотношения ширины оригинала с будущей превьюшкой.
$koe=$iw/200;//Делим высоту изображения на коэфициент, полученный в предыдущей строке, и округляем число до целого в большую сторону — в результате получаем высоту нового изображения.
$new_h=ceil ($ih/$koe);//Создаём пустое изображение шириной в 200 пикселей и высотой, которую мы вычислили в предыдущей строке.
$dst=ImageCreateTrueColor (200, $new_h);//Данная функция копирует прямоугольную часть изображения в другое изображение, плавно интерполируя пикселные значения таким образом, что, в частности, уменьшение размера изображения сохранит его чёткость и яркость.
ImageCopyResampled ($dst, $src, 0, 0, 0, 0, 200, $new_h, $iw, $ih);//Сохраняем полученное изображение в формате JPG
ImageJPEG ($dst, $path3, 60);
imagedestroy($src);

Решение подсмотрел на каком то форуме.
#4 6 ноября 2019 в 22:46
Олег с клещами, вы немножко лукавите. PHP ограничивает, то что загружается. Проверить это можно так:
  1. <?php
  2. echo 'Максимальный размер загружаемого файла : '.ini_get('upload_max_filesize')."\n";
  3. echo 'Максимальный объём загружаемых данных : '.ini_get('post_max_size')."\n";
  4.  
Если объём уже загруженных файлов не гигабайты, то как вариант можно сделать автономный скрипт, который будет обходить папки с файлами и уменьшать размер слишком больших по алгоритму, аналогичному предложенному @chameleon9. Но этот скрипт будет перезаписывать существующее изображение и не создавать нового. Запускаться по cron.
+ — никакого вторжения в код движка.
#5 7 ноября 2019 в 07:40


Олег с клещами, вы немножко лукавите. PHP ограничивает, то что загружается. Проверить это можно так:

  1.  
  2.  

@IamB

Вот насчёт скрипта — хорошее дело. Кто бы написал?
А насчёт ограничений php -нехорошее дело, т.к. эти ограничения должны быть только для юзеров.
#6 7 ноября 2019 в 09:14
Олег с клещами, может это поможет
#7 7 ноября 2019 в 10:33

А насчёт ограничений php -нехорошее дело, т.к. эти ограничения должны быть только для юзеров.

Олег с клещами
Когда PHP подключён как модуль Apache, то можно пробовать использовать директивы htaccess
  1.  
  2. php_value upload_max_filesize 10M
  3. php_value post_max_size 40M
  4.  
Вы не можете отвечать в этой теме.
Войдите или зарегистрируйтесь, чтобы писать на форуме.
Используя этот сайт, вы соглашаетесь с тем, что мы используем файлы cookie.