Здравствуйте, товарищи.
Очередной вопрос - каким образом можно осуществить загрузку изображений на сайт, используя минимум кода?
На данный момент я имею приложение на php, к которому имеют доступ пользователи. Эти же самые пользователи имеют возможность загружать картинки на сервер и получать их в виде своей аватарки, как пример.
Чтобы избежать попыток стеганографии через картинки - я вручную сжимаю каждое изображение.
Выглядит это примерно так:
function picproc($file, $h, $w){
$pic = $file;
$percent = 0.3;
list($width, $height) = getimagesize($pic);
$new_width = $w;
$new_height = $h;
$image_p = imagecreatetruecolor($new_width, $new_height);
$image = imagecreatefromjpeg($pic);
imagecopyresampled($image_p, $image, 0, 0, 0, 0, $new_width, $new_height, $width, $height);
imagejpeg($image_p, $file, 100);
@unlink($ho['Upic']);
}
Данный пример не самый лучший, но он позволяет избежать загрузку слишком больших полотен изображения, и не позволяет злоумышленникам использовать метод стеганографии.
Главная проблема - эта функция работает исключительно с изображениями формата jpeg (imagecreatefromjpeg). И в случае, если пользователь загружает на сайт изображение, например, формата gif или png - приложение выдаёт ошибку, ибо функция imagecreatefromjpeg не работает с другими форматами.
Может быть, есть какой-то универсальный метод для сжатия изображения до определённых параметров, любого формата?
upd: во время работы над ошибкой - я пришёл к паре решений, но не уверен, подойдут ли они в конкретной ситуации, когда нужно изменить изображение, и исключить загрузку больших изображений.
1 - поставить ограничение на загрузку файлов, ибо на данный момент используется стандартное ограничение в php (не припомню уже, сколько там мбайт). На своей памяти я не помню, чтобы мне встречались огромные 200к изображения, которые весили < 5mb.
2 - добавлять на изображения какой-то логотип или вотермарк. В таком случае изображение будет изменено, но опять же - даже если использовать этот подход - придётся сталкиваться с imagecreatefrom функциями, которые для каждого формата - свои.
3 - прибегнуть к какой-то сторонней библиотеке, в которой работа с изображениями реализована попроще, но использовать что-то стороннее - крайне не хочется (стараюсь всё писать самостоятельно)