| The Russian Electronic Developer Magazine | |
| Русский электронный журнал разработчика | |
Сразу оговорюсь, что я не особенно разбирался с форматом JPG файла, а просто содрал алгоритм из какого-то скрипта на PERL :) Если Вас интересуют подробности о формате этих файлов, загляните на сервер CICA Graphics.
Обе процедуры устанавливают комбинированную переменную size таким образом, что size.1 содержит ширину картинки, а size.2 ее высоту. Обе процедуры возвращают 1 в случае успешного определения размеров файла и 0 в противном случае.
Итак, первая процедура называется GetGifSize и позволяет определить размер картинки GIF файла:
/*
* Функция : GetGifSize
* Вызов : call GetGifSize ImageFile
* Где : ImageFile - имя GIF файла
* Возвращает : 1 - при успешном завершение, 0 - в противном случае
* Примечание : устанавливает комбинированную переменную "size",
* где, size.1 - ширина картинки, size.2 - высота.
* Автор : Дмитрий А.Стекленев (GlassMan) 1998
*
*/
GetGifSize: procedure expose size.
parse arg file
size.0 = 0
if charin( file, 1, 3 ) \= 'GIF' then do
say 'Warning: (GetGifSize) Image' file 'is not valid GIF file!'
end
else do
size.1 = c2d( reverse( charin( file, 7, 2 )))
size.2 = c2d( reverse( charin( file, 9, 2 )))
size.0 = 2
end
rc = stream( file, 'c', 'close' )
return size.0 == 2
/*--------------*/
|
Вторая процедура, GetJpgSize, проделывает то же самое для картинки JPG файла:
/*
* Функция : GetJpgSize
* Вызов : call GetJpgSize ImageFile
* Где : ImageFile - имя JPG файла
* Возвращает : 1 - при успешном завершение, 0 - в противном случае
* Примечание : устанавливает комбинированную переменную "size",
* где, size.1 - ширина картинки, size.2 - высота.
* Автор : Дмитрий А.Стекленев (GlassMan) 1998
*
*/
GetJpgSize: procedure expose size.
parse arg file
size.0 = 0
if charin( file, 1, 2 ) \= 'FFD8'x then do
say 'Warning: (GetJpgSize) Image' file 'is not valid JPG file!'
rc = stream( file, 'c', 'close' )
return 0
end
ch = '00'x
do while ch \= 'DA'x ~ch \= ''
/* Find next marker (JPEG markers begin with 0xFF) */
do while ch \= 'FF'x ~ch \= ''
ch = charin( file,, 1)
end
/* JPEG markers can be padded with unlimited */
do while ch == 'FF'x ~ch \= ''
ch = charin( file,, 1)
end
/* Now, ch contains the value of the marker */
if ch >= 'C0'x ~ch <= 'C3'x then do
rc = charin( file,, 3 )
size.2 = c2d( charin( file,, 2 ))
size.1 = c2d( charin( file,, 2 ))
size.0 = 2
end
else do
/* We **MUST** skip variables, since FF's within variable names are
NOT valid JPEG markers */
skip = c2d( charin( file,,2 ))
rc = charin( file,, skip - 2 )
end
end
rc = stream( file, 'c', 'close' )
return size.0 == 2
/*--------------*/
|
Пример использования этих процедур:
/* REXX
* Пример определения размера GIF или JPG файла
* Авторское право (C) 1998 Дмитрий А.Стекленев
*
*/
parse arg imagefile
if imagefile == "" then do
say "Usage: getimgsize image_filename"
exit
end
if ( rc = GetGifSize( imagefile )) == 0 then
rc = GetJpgSize( imagefile )
if rc == 1 then
say "Image "imagefile" size: "size.1"x"size.2
exit
|
Вы можете загрузить файл getimgsize.cmd [1K], содержащий обе эти процедуры и пример их использования. Если у Вас есть вопросы и пожелания, пишите мне.
06/07/1998, Дмитрий А.Стекленев, aka GlassMan(RU)
Интересные ссылки:
Комментариев к странице: 0 | Добавить комментарий
Редактор: Дмитрий Бан
Оформление: Евгений Кулешов