Forum Webscript.Ru
Программирование => PHP => Тема начата: Sad Raven от 27 Июня 2002, 08:57:30
-
Предположим, что через форму я получил файл my_photo.jpg.
Естесно, прежде чем его копировать из темпа, я проверяю какого типа этот файл:
if ($upload_photo_type == "image/jpeg"):
.........
endif;
Но вот тут встает другой вопрос:
Как узнать, что это действительно рисунок, а не, например, архив my_photo.rar, переименованый в my_photo.jpg?
-
http://www.php.net/getimagesize
-
Проверить сигнатуру.
Вообще-то для этого есть отдельная функция exif_imagetype(), но она доступна, только если пакет был скомпилирован с ключом --enable-exif
Если тебе не повезло - то придется самостоятельно написать такую функцию.
Скажем, для формата JPEG первое слово в изображении - 0xFFD8
-
Кстати, чуть не забыл - getimagesize() тоже возвращает типизображения
-
getimagesize() ? Хм...
$aaa = getimagesize($upload_photo);
foreach ($aaa as $value) echo "$value";
Выдает:
160 - это понятно
228 - это понятно
2 - а вот это непонятно
width="160" height="228" - это понятно
8 - и это непонятно
3 - это тоже непонятно
-
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, блин.
-
160 - это понятно, ширина
228 - это понятно, высота
2 - теперь понятно, JPG
width="160" height="228" - это понятно
8 - это осталось непонятно
3 - и это тоже непонятно
-
Последние два неизвестных параметра появляются только в JPEG.
3 - это количество цветов.
А вот что такое 8 - я не знаю. Знаю, что это НЕ битрейт и не качество.
-
3 - это количество цветов.
Ты уверен?
Обычно количество цветов в битах указывается. А для цветного жпега это всегда 24. Для grayscale jpega может быть, как 8 так и 16.
Также эти значения могут указывать цветовое пространство
(GRAYSCALE,RGB,YCbCr,CMYK,YCCK), сглаживание, тип кодирования, dithering\'а или чего-то еще. Вариантов много. Нужно искать в доках.
-
Блин, я слепой. :)
"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. "
-
Вообще говоря, странно (я про bits for each color). Я сохранял JPEG и в 16M цветов и в 256 - это значение не меняется (потому я и не стал его расшифровывать - в цветах все сошлось, а вот с битрейтом - не шибко). Может, конечно, я что-то сделал криво...
-
Jpeg не может хранить изображения в 256-цветах (только grayscale). Так что, сохраняй, хоть в 256, хоть в 16 цветов - все равно будет 16М. Стандарт, блин :)
-
Мдя, значит это я стормозил... 8 бит для оттенков одного цвета - это и будет 256 цветов :))
-
Логично :):):)
-
А что за такэ:
image/pjpeg