Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #11 (permalink)  
Старый 26.11.2017, 14:28
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Что только GIF? А если будет не этот формат?
Ответить с цитированием
  #12 (permalink)  
Старый 26.11.2017, 14:37
Профессор
Отправить личное сообщение для Sonya Посмотреть профиль Найти все сообщения от Sonya
 
Регистрация: 07.07.2016
Сообщений: 273

Пользователь может загрузить только файлы с расширением png, jpg и gif (который в приоритете), на выходе получиться только gif. Читала, что и в целях безопасности это помогает. Читала, что и использование copy, не рекомендуется, но без примеров и указания в каких именно случаях. Посчитала, что в данном случае, это приемлемо, т.к. не увидела "подводных камней" (хотя, это и не говорит о том, что их там нет).
Ответить с цитированием
  #13 (permalink)  
Старый 26.11.2017, 14:50
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сохранить JPEG, а тем более PNG в GIF, это урезать изображение до безобразия, да еще все и вслепую.

Если к изображению и "приклеят" непотребное, то от exif можно и избавиться, это не проблема. И сам по себе код вклеенный не выполнится, нужен "помощник".

Если загрузка по ссылке, то так (используя GD):

if($im = imagecreatefromstring(file_get_contents('url'))) {
    //обработка изображения $im, можно уменьшить его на один пиксель по ширине/высоте,
    //все что вклеили будет удалено
    //можно узнать палитру изображения, если индексированная, то сохранять в GIF
    //иначе сохранять как JPEG
    //все это функциями GD
    //стоит учесть, что если GIF анимация, то она будет утеряна, сохранится только первый ее кадр 
} else {
    //мусор
}
Ответить с цитированием
  #14 (permalink)  
Старый 26.11.2017, 15:01
Кандидат Javascript-наук
Отправить личное сообщение для Lion777 Посмотреть профиль Найти все сообщения от Lion777
 
Регистрация: 04.11.2017
Сообщений: 117

<?php
$addrImage = 'https://javascript.ru/forum/images/ca_serenity/misc/logo.gif';
$testImage = exif_imagetype($addrImage);
if ($testImage > 0 AND $testImage < 18) echo 'Данный файл изображение';

так можно и сделать что-бы корректно расширение создавалось, не наугад, а какое должно быть.
Ответить с цитированием
  #15 (permalink)  
Старый 26.11.2017, 15:05
Профессор
Отправить личное сообщение для Sonya Посмотреть профиль Найти все сообщения от Sonya
 
Регистрация: 07.07.2016
Сообщений: 273

laimas, спасибо, но дело в том, что это, как раз и есть анимированная картинка, поэтому ... Переформатирование картинок из png и jpg, не столь разительно в данном случае, поэтому особой роли не играет, тем более, что пользователь об этом предупрежден.
Ответить с цитированием
  #16 (permalink)  
Старый 26.11.2017, 15:20
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от Sonya
это, как раз и есть анимированная картинка
Тогда не проблема, открыли изображение из строки, узнали палитру - если truecolor, значит сохранили посредством GD. Exif при этом не сохраняется, а если вклеили в тело (есть умельцы), то можно изменить размер.
В противном случае сохраняем как GIF - file_put_contents(скачанное посредством file_get_contents).

imagecreatefromstring здесь для того, чтобы отсеять мусор. Имейте ввиду и возможные большие размеры, это будет проблемой уже для file_get_contents, не говоря уже о GD.

Если у вас на хосте доступен ImageMagick, то все операции лучше проделать в нем, он на гораздо большее способен, чем GD, включая и поддержку GIF анимации. GD же ее непосредственно не поддерживает, хотя можно и в нем, но писать свое уже.
Ответить с цитированием
  #17 (permalink)  
Старый 26.11.2017, 15:22
Профессор
Отправить личное сообщение для Sonya Посмотреть профиль Найти все сообщения от Sonya
 
Регистрация: 07.07.2016
Сообщений: 273

Lion777,
exif_imagetype - определяет расширение файла?
Ответить с цитированием
  #18 (permalink)  
Старый 26.11.2017, 15:25
Профессор
Отправить личное сообщение для Sonya Посмотреть профиль Найти все сообщения от Sonya
 
Регистрация: 07.07.2016
Сообщений: 273

laimas,
Спасибо, буду пробовать.
Ответить с цитированием
  #19 (permalink)  
Старый 26.11.2017, 15:26
Профессор
Отправить личное сообщение для laimas Посмотреть профиль Найти все сообщения от laimas
 
Регистрация: 14.01.2015
Сообщений: 12,990

Сообщение от Sonya
определяет расширение файла?
Определяет тип файла, но не надейтесь на это, эта функция считывает начальные байты и проверяет их сигнатуру. А речь то идет о подделке.

imagecreatefromstring же, пытается открыть ресурс из строки, если прислали не изображение, то вернет false.

Последний раз редактировалось laimas, 26.11.2017 в 15:29.
Ответить с цитированием
  #20 (permalink)  
Старый 26.11.2017, 15:27
Кандидат Javascript-наук
Отправить личное сообщение для Lion777 Посмотреть профиль Найти все сообщения от Lion777
 
Регистрация: 04.11.2017
Сообщений: 117

по сигнатуре определяет тип файла, только изображения, посмотрите на php.net синтаксис.
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Удаление и копирование между страницами Medvedoc jQuery 8 12.08.2015 22:01
копирование текста из ячейки таблицы в textarea racoon Общие вопросы Javascript 5 22.07.2013 22:17
копирование файлов в обход ограничений безопасности danil2011 Internet Explorer 0 27.06.2011 07:43
Копирование блоков страницы(или целиком) Phoenix Общие вопросы Javascript 30 24.03.2008 23:46