Forum Webscript.Ru

Программирование => Perl => Тема начата: evgeny_s от 19 Июля 2002, 12:57:22

Название: Как определить height и width у картинки для ее правильного отображения?
Отправлено: evgeny_s от 19 Июля 2002, 12:57:22
Если кто знает, как сделать так, чтобы скрипт перед отображением картинки *.jpg или *.gif определял ширину и высоту в пикселях у такой картинки (если картинка маленькая - отображать сбоку, если большого размера - то снизу)?
   С уважением, Евгений
Название: Как определить height и width у картинки для ее правильного отображения?
Отправлено: YA от 19 Июля 2002, 13:03:25
http://forums.webscript.ru/showthread.php?s=&threadid=6603&msgnum=9
Название: Как определить height и width у картинки для ее правильного отображения?
Отправлено: evgeny_s от 19 Июля 2002, 14:44:01
В общем этот код у меня не работает. Есть какой - нибудь другой, или может кто-нить объяснит, куда надо имя файла *.jpg вставлять???


($width, $height) = &get_jpg_dimentions($jpeg_file);

sub get_jpg_dimentions {
my($file_name) = shift || die "Image file not specified";
my($buffer, $id, $length);

open(JPG_FILE, \'<\' . $file_name) || die "Couldn\'t open image: $!";
binmode JPG_FILE;
sysread(JPG_FILE, $buffer, 2);
unless ($buffer eq "\\xFF\\xD8") {
warn "Not a JPEG file";
return;
}
while(sysread(JPG_FILE, $buffer, 4) == 4) {
($id, $length) = unpack("nn", $buffer);

if (($id == 0xFFC2) || ($id == 0xFFC0)) {
sysread(JPG_FILE, $buffer, 5);
close(JPG_FILE);
return (unpack("cnn", $buffer))[2,1];
}
else {
sysread(JPG_FILE, $buffer, $length - 2);
}
}
close(JPG_FILE);
return;
}
Название: Как определить height и width у картинки для ее правильного отображения?
Отправлено: evgeny_s от 19 Июля 2002, 14:50:11
Вся проблема в том, что в переменной $width  ничего нет после выполнения кода. Чем отличается $jpeg_file от $file_name в этом коде? И как можно этот код написать без return и sub - чтоб сразу в $width и $height размеры выдавались?
С уважением, Евгений.
Название: Как определить height и width у картинки для ее правильного отображения?
Отправлено: evgeny_s от 19 Июля 2002, 15:41:28
Вобщем так. Этот скрипт я кинул нафиг. Вот есть гораздо лучше.


open(IMG ,"images/001.jpg");
sub Read1IMG {
  read (IMG, $b, 1);
  return ord($b);
}
sub Read2IMG {
  read (IMG, $msb, 1);
  read (IMG, $lsb, 1);
return ( (ord($msb) << 8) | ord($lsb) );
}
local $stop = 0;
while (!$stop) {
  $aMarker = Read1IMG();
  while ($aMarker != 0xFF) { $aMarker = Read1IMG(); }
  $aMarker = Read1IMG();
  while ($aMarker == 0xFF) { $aMarker = Read1IMG(); }
  ### got next marker
  if ( (($aMarker >= 0xC0) && ($aMarker <= 0xCF)) &&
  ($aMarker != 0xC4) && ($aMarker != 0xCC) ) {
Read2IMG();
Read1IMG();
$img_height = Read2IMG();
$img_width = Read2IMG();
$stop = 1;
$img_type = "jpg";
  }
}
print "Content type = text/html\\n\\n"
print "Тип: $img_type, Высота: $img_height, Ширина: $img_width\\n";
Название: Как определить height и width у картинки для ее правильного отображения?
Отправлено: YA от 19 Июля 2002, 21:28:24
Цитировать
В общем этот код у меня не работает.

Иди по ссылке (см. выше), читай внимательно. Все работает на 100%. Гарантирую!
Название: Как определить height и width у картинки для ее правильного отображения?
Отправлено: Serchey от 26 Июля 2002, 12:33:24
Внимание!
В YA скрипте есть ошибка - исправив которую все работает исправно:
...
sysread(JPG_FILE, $buffer, 2);
unless ($buffer eq "xFFxD8") { - "\\xFF\\xD8" -кто ж так шестнацетиричные представляет?
warn "Not a JPEG file"; - я бы использовал die;
return;
}

А вот в скрипте
...

А вот в скрипте evgeny_s присутствуют аномалии(не люблю замкнутых цыклов). Делайте выводы, господа.
Название: Как определить height и width у картинки для ее правильного отображения?
Отправлено: КшЫуфксрук от 26 Июля 2002, 12:40:14
Image::Size
Название: Как определить height и width у картинки для ее правильного отображения?
Отправлено: Serchey от 26 Июля 2002, 13:07:10
В догонку
evgeny_s, сорри - твой скрипт вполне работает, только добавь binmode(IMG);
Название: Как определить height и width у картинки для ее правильного отображения?
Отправлено: YA от 14 Августа 2002, 00:13:53
Serchey
[OFF]Вернувшись из отпуска, хочу восстановить справедливость[/OFF]
С чего ты взял, что я ссылался на свой скрипт? Я всего лишь написал, что того примера вполне достаточно для решения данной задачи. А в моем скрипте такой строки нет вообще :)
Название: Как определить height и width у картинки для ее правильного отображения?
Отправлено: Vovan от 14 Августа 2002, 00:27:54
Image::Size - это все,  что нужно.
Название: Как определить height и width у картинки для ее правильного отображения?
Отправлено: Serchey от 14 Августа 2002, 01:14:40
YA
Я за справедливость! :beer: