Forum Webscript.Ru

Программирование => PHP => Тема начата: Sad Raven от 27 Июня 2002, 08:57:30

Название: Проверка типа.
Отправлено: Sad Raven от 27 Июня 2002, 08:57:30
Предположим, что через форму я получил файл my_photo.jpg.
Естесно, прежде чем его копировать из темпа, я проверяю какого типа этот файл:
if ($upload_photo_type == "image/jpeg"):
.........
endif;
Но вот тут встает другой вопрос:
Как узнать, что это действительно рисунок, а не, например, архив my_photo.rar, переименованый в my_photo.jpg?
Название: Проверка типа.
Отправлено: Меняздесьдавнонет от 27 Июня 2002, 10:46:22
http://www.php.net/getimagesize
Название: Проверка типа.
Отправлено: Maniac от 27 Июня 2002, 10:48:19
Проверить сигнатуру.
Вообще-то для этого есть отдельная функция exif_imagetype(), но она доступна, только если пакет был скомпилирован с ключом --enable-exif
Если тебе не повезло - то придется самостоятельно написать такую функцию.

Скажем, для формата JPEG первое слово в изображении - 0xFFD8
Название: Проверка типа.
Отправлено: Maniac от 27 Июня 2002, 10:50:44
Кстати, чуть не забыл - getimagesize() тоже возвращает типизображения
Название: Проверка типа.
Отправлено: Sad Raven от 28 Июня 2002, 06:38:41
getimagesize() ? Хм...


$aaa = getimagesize($upload_photo);
foreach ($aaa as $value) echo "$value";

Выдает:
160 - это понятно
228 - это понятно
2 - а вот это непонятно
width="160" height="228" - это понятно
8 - и это непонятно
3 - это тоже непонятно
Название: Проверка типа.
Отправлено: Metaller от 28 Июня 2002, 09:21:23
Returns an array with 4 elements. Index 0 contains the width of the image in pixels. Index 1 contains the height. Index 2 a flag indicating the type of the image. 1 = GIF, 2 = JPG, 3 = PNG, 4 = SWF, 5 = PSD, 6 = BMP, 7 = TIFF(intel byte order), 8 = TIFF(motorola byte order, 9 = JPC, 10 = JP2, 11 = JPX. Index 3 is a text string with the correct height="yyy" width="xxx" string that can be used directly in an IMG tag.

RTFM, блин.
Название: Проверка типа.
Отправлено: Sad Raven от 28 Июня 2002, 09:43:55
160                                     - это понятно, ширина
228                                     - это понятно, высота
2                                         - теперь понятно, JPG
width="160" height="228" - это понятно
8                                         - это осталось непонятно
3                                         - и это тоже непонятно
Название: Проверка типа.
Отправлено: Maniac от 28 Июня 2002, 10:43:36
Последние два неизвестных параметра появляются только в JPEG.
3 - это количество цветов.
А вот что такое 8 - я не знаю. Знаю, что это НЕ битрейт и не качество.
Название: Проверка типа.
Отправлено: Metaller от 28 Июня 2002, 10:52:49
Цитировать
3 - это количество цветов.

Ты уверен?
Обычно количество цветов в битах указывается. А для цветного жпега это всегда 24. Для grayscale jpega может быть, как 8 так и 16.

Также эти значения могут указывать цветовое пространство
(GRAYSCALE,RGB,YCbCr,CMYK,YCCK), сглаживание, тип кодирования, dithering\'а или чего-то еще. Вариантов много. Нужно искать в доках.
Название: Проверка типа.
Отправлено: Metaller от 28 Июня 2002, 10:54:49
Блин, я слепой. :)

"With JPG images, two extras index are returned : channel and bits. channel will be 3 for RGB pictures, and 4 for CMYK pictures. bits is the number of bits for each color. "
Название: Проверка типа.
Отправлено: Maniac от 28 Июня 2002, 11:01:35
Вообще говоря, странно (я про bits for each color). Я сохранял JPEG и в 16M цветов и в 256 - это значение не меняется (потому я и не стал его расшифровывать - в цветах все сошлось, а вот с битрейтом - не шибко). Может, конечно, я что-то сделал криво...
Название: Проверка типа.
Отправлено: Metaller от 28 Июня 2002, 11:05:17
Jpeg не может хранить изображения в 256-цветах (только grayscale). Так что, сохраняй, хоть в 256, хоть в 16 цветов - все равно будет 16М. Стандарт, блин :)
Название: Проверка типа.
Отправлено: Maniac от 28 Июня 2002, 11:12:05
Мдя, значит это я стормозил... 8 бит для оттенков одного цвета - это и будет 256 цветов :))
Название: Проверка типа.
Отправлено: Metaller от 28 Июня 2002, 11:13:43
Логично :):):)
Название: Проверка типа.
Отправлено: Sad Raven от 28 Июня 2002, 12:36:54
А что за такэ:

image/pjpeg