forum.boolean.name

forum.boolean.name (http://forum.boolean.name/index.php)
-   Библиотеки (http://forum.boolean.name/forumdisplay.php?f=124)
-   -   Загрузка изображений по HTTP (http://forum.boolean.name/showthread.php?t=2521)

ARV 27.01.2007 00:45

Загрузка изображений по HTTP
 
Вложений: 2
Вопрос к уважаемому pilgrim-у:
с сайта SUN взял пример кода для загрузки изображений по http http://developers.sun.com/techtopics...hod/index.html (о чем тут многие задают вопросы), попробовал сделать из него библиотеку для паскаля... библиотека компилится, паскаль ее глотает, но вместо загрузки картинки мидлет просто виснет... Подскажи, что я сделал не так?

Piligrim 27.01.2007 12:57

Re: Загрузка изображений по HTTP
 
Вложений: 2
Lib_im с примером
image_from_url(url)
image_from_string(string)

PS: это небольшая переработка библиотеки, которая лежала на midletpascal.com

ARV 27.01.2007 14:29

Re: Загрузка изображений по HTTP
 
Выходит, пример с сайта SUN - лажа?... Или все-таки я его испохабил?

ViNT 12.04.2007 16:37

Re: Загрузка изображений по HTTP
 
Цитата:

Сообщение от pilgrim
Lib_im с примером
image_from_url(url)
image_from_string(string)

PS: это небольшая переработка библиотеки, которая лежала на midletpascal.com

А как использовать функцию Image_from_string (в примере нету)?
какую сторку ей надо передать?
пытался прочитать файл в строку и передать процедуре-бесполезно

Coder 09.12.2007 14:58

Re: Загрузка изображений по HTTP
 
Можно сделать чтобы скачанная картинка грузилась на форму вот таким способом imageID:=FormAddImage(LoadImage(img)) ?
Если делать drawImage - то это уже Convas!

Piligrim 09.12.2007 23:00

Re: Загрузка изображений по HTTP
 
Цитата:

Сообщение от Coder
Можно сделать чтобы скачанная картинка грузилась на форму вот таким способом imageID:=FormAddImage(LoadImage(img)) ?
Если делать drawImage - то это уже Convas!

можно

Coder 09.12.2007 23:18

Re: Загрузка изображений по HTTP
 
Только что, до прочтения сообщения заново скомпилировал прогу и загрузилось!
Надо было так писать:
img:=im.image_from_url('http://www.site.ru/pic.png');
imgID := FormAddImage(img);

Coder 11.12.2007 00:03

Re: Загрузка изображений по HTTP
 
Почему-то эмулятор загружает картинки этим способом, а мобильник не нет. Телефон Nokia S60 Symbian 7. В чём может быть проблема? Как сделать чтобы загружалось?

odd 11.12.2007 08:32

Re: Загрузка изображений по HTTP
 
Может профиль интернета для Java не настроен или защита не позволяет выход в инет (смотри настройки безопасности).

Coder 11.12.2007 17:40

Re: Загрузка изображений по HTTP
 
Написал в конце "showform;" и на телефоне тоже стало отображаться.

Теперь другой вопрос: Как отобразить картинку jpeg? Так: im.image_from_url она загружается, но не отображается. Может как-то переконвертировать в памяти изображение в png или gif ? Но как?
Или может есть библиотеки для того чтобы отображались jpeg?

ViNT 11.12.2007 19:38

Re: Загрузка изображений по HTTP
 
Да вообще-то обычно java все равно, какой формат, лишь бы мобила поддерживала. Я например загружал изображение из фс, даже если поменять расширение(например с jpg на bmp).

cHeRsAnYa 10.01.2008 22:39

Ответ: Загрузка изображений по HTTP
 
А можно сделать функцию наоборот imageToString?

Piligrim 10.01.2008 22:52

Ответ: Загрузка изображений по HTTP
 
Можно. Только вот как ее применять? Она будет несовместима ни с одним графическим форматом, только внутренне применение.

ViNT 11.01.2008 00:22

Ответ: Загрузка изображений по HTTP
 
Вложений: 1
Вот библиотека для преобразования изображения в строку.
P.S. cHeRsAnYa, достаточно было написать запрос в одной теме.

cHeRsAnYa 11.01.2008 15:19

Ответ: Загрузка изображений по HTTP
 
Спасибо. Как можно сделать, чтобы изображение сохранялось на сервере с возможностью последующего просмотра? Скрипт не проблема.

Piligrim 11.01.2008 16:11

Ответ: Загрузка изображений по HTTP
 
Ты же вчера спрашивал, как сделать POST запрос. Там есть функция addHttpBody.

cHeRsAnYa 11.01.2008 18:06

Ответ: Загрузка изображений по HTTP
 
Ты писал "Она будет несовместима ни с одним графическим форматом, только внутренне применение.". Вот я и спрашиваю.

ViNT 11.01.2008 20:09

Ответ: Загрузка изображений по HTTP
 
Имеется в виду, что отправить его можно, но ни одна стандартная программа не сможет его обработать.

Piligrim 11.01.2008 20:11

Ответ: Загрузка изображений по HTTP
 
Мда-уж. Учись задавать более конкретные вопросы. Как я уже сказал, преобразование изображения в строку тебе не поможет в данном случае. Здесь надо совместить код нескольких библиотек. Придется немного подождать. Из возможных форматов сохранения будут bmp и png. А при работе с камерой, наверное и jpg.

cHeRsAnYa 12.01.2008 11:34

Ответ: Загрузка изображений по HTTP
 
Тоесть пока (с имеющимися библиотеками) невозможно отправить картинку с камеры на сервер в формате jpg?

EVIL_USER 12.01.2008 13:21

Re: Загрузка изображений по HTTP
 
Тогда, если можно, хотелось бы чтобы можно было по фтп отправлять (хочу что-то вроде веб камеры сделать, только чтобы без серверных скриптов, на любой хост заливалось)

Skythrone 15.07.2008 20:45

Ответ: Загрузка изображений по HTTP
 
Приветствую всех!

Что-то не могу заставить работать Lib_im.class. Даже приведённый Pilgrim'ом в одном из верхних постов пример напрочь не работает:

Код:

program ImageDemo;
uses im;
begin
        drawImage(im.image_from_url('http://avt.foto.mail.ru/mail/kalisto_87/_mrimavatar'), 0, 0);
        repaint;       
        delay(2000);
end.

Выдаётся просто белый экран.

Обратное преобразование (ImageToString) и библиотека Lib_imtostr.class тоже напрочь не работают. :(

Как быть? Где собака порылась?

Я пытаюсь сделать загрузку изображний по HTTP, сохранение их в RecordStore и затем воспроизведение по запросу. Может быть, посоветуете какие-то более простые пути для решения этой задачи?

ViNT 15.07.2008 21:12

Ответ: Загрузка изображений по HTTP
 
Да у меня все нормально, только грузит долго, подождать надо.

Skythrone 15.07.2008 21:17

Ответ: Загрузка изображений по HTTP
 
Гм, загрузил это на эмулятор от SE - всё заработало.

А на эмуляторах SjBoy и MidpX - не работает. :dontknow:

Ну что ж, буду разбираться дальше.

Skythrone 15.07.2008 22:00

Ответ: Загрузка изображений по HTTP
 
Никак не могу понять - в каком формате должен быть string при использовании image_from_string.

PHP код:

image image_from_string(string source) - Создать картинку из строки 

Как конкретно выглядит эта строка source? Это просто бинарные данные, побайтно считанные из файла картинки? Или какое-то более хитрое представление?

odd 16.07.2008 08:09

Ответ: Загрузка изображений по HTTP
 
Цитата:

Сообщение от Skythrone (Сообщение 82355)
Никак не могу понять - в каком формате должен быть string при использовании image_from_string.

PHP код:

image image_from_string(string source) - Создать картинку из строки 

Как конкретно выглядит эта строка source? Это просто бинарные данные, побайтно считанные из файла картинки? Или какое-то более хитрое представление?

В данном случае строка - это побайтно считанные данные и помещенные в строку.

Skythrone 17.07.2008 00:49

Ответ: Загрузка изображений по HTTP
 
Коллеги, взываю о помощи!

Почти целый день сегодня ковырялся с созданием картинки из строки - ничего не получается. :wallbash:

Вот скажите, где я не прав? В чём ошибка?

Код:

program ImageDemo;
uses im;
var s:string;
    i:integer;
    img:image;
    conn: http;

begin

{
// если так делать, то всё работает
 img:=Image_From_URL('http://mad-love.ru/pic/lficon_reg.png');
 drawImage(img,10,10);
 repaint;       
 delay(2000);
}

// а вот так - совсем не работает. :(

 if not OpenHttp(conn, 'http://mad-love.ru/pic/lficon_reg.png') then Halt;

 SetHttpMethod(conn, GET);
 if SendHttpMessage(conn) <> 200 then Halt;
 s:=GetHttpResponse(conn);
 CloseHttp(conn);

 img:=Image_From_string(s);
 drawImage(img,10,10);
 repaint;       
 delay(2000);

end.


ViNT 17.07.2008 01:58

Ответ: Загрузка изображений по HTTP
 
Так а чем Image_from_url не устраивает?
Во-первых советую посмотреть, что находится в строке, получаемой с сервера. Во- вторых, я как-то пытался читать файл в строку и передавать её этой функции - ничего не получилось.

Skythrone 17.07.2008 02:14

Ответ: Загрузка изображений по HTTP
 
В строке от сервера выдаётся точно именно эта картинка. Длина строки соответствует размеру картинки в байтах.

Дело в том, что требуется дёрнуть картинку с сервера только один раз, а затем сохранить её в RecordStore и отображать уже без необходимости закачки данных с сервера.

Других вариантов, кроме как Image_From_String, я здесь не вижу.

Я уже слегка в отчаянии. :(

ViNT 17.07.2008 03:24

Ответ: Загрузка изображений по HTTP
 
Тогда так:
1. Грузим картинку с сервера с помощю Image_from_url.
2. Преобразуем её в массив значений ARGB.
3. Сохраняем данные из массива в RS.
4. Грузим данные из RS в массив.
5. Преобразуем ARGB обратоно в Image и выводим его.

Минус такого подхода - медленная работа и отсутствие сжатия данных.

Skythrone 17.07.2008 14:07

Ответ: Загрузка изображений по HTTP
 
Я тоже думал об этом. Но это же такие тормоза будут!

К тому же, если картинка размером 240x320 в формате JPEG/PNG занимает около 10 кб, то при хранении в ARGB она будет занимать 240x320x4 = 307200. Это почти в 30 раз больше.

Не, это совсем не вариант. :(

Skythrone 10.08.2008 02:12

Ответ: Загрузка изображений по HTTP
 
Есть вопрос. Он касается как данной библиотеки, так и библиотеки web.

Что произойдёт, если будет попытка загрузки изображения (или любых других данных по HTTP) в случае нестабильной или отсутствующей связи?

Особенно в такие неприятные моменты, когда сеть практически отсутствует, но при этом телефон ловит лишь спецсигналы о наличии GPRS и т.п. (например, в туннелях, в закрытых помещениях, в перегонах метро).
В этом случае коннект есть только формальный, реально данные по HTTP телефон получить не может, в результате чего мидлет просто зависает. Проверял лично.

По идее, тут нужно ставить либо таймаут ответа (например, 3-4 секунды), либо как-то корректно обрабатывать exception. Как это сделать при использовании библиотек - непонятно.

Уважаемые коллеги, что вы можете посоветовать?

Piligrim 10.08.2008 23:20

Ответ: Загрузка изображений по HTTP
 
по идее, в данном случае, библиотека должна отловить исключение и выдать null, т.е. что есть проблемы с загрузкой.

Skythrone 11.08.2008 00:53

Ответ: Загрузка изображений по HTTP
 
Понимаешь, если бы коннекта не было, то быть может она и отловила бы.

А так коннект вроде есть, но скорость скачки 2 байта в секунду.

ViNT 11.08.2008 14:45

Ответ: Загрузка изображений по HTTP
 
Вопрос в том, предусмотрена ли функция для отмены передачи/приема данных. Если да - добавить таймер (TimerTask), который будет следить за таймаутом, и в случае зависания останавливать обработку запроса.

Dj_Alex 04.11.2010 00:03

Ответ: Загрузка изображений по HTTP
 
Вложений: 1
что-то imageTostring толком не работает
Вложение 11688
во второй строчке содержимое получамой строки
при другом изображении изменяются лишь символы после @

скрин с эмулятора, на телефоне строчка другая: javax.microedition.lcdui.Image@130b...

ViNT 04.11.2010 02:18

Ответ: Загрузка изображений по HTTP
 
Цитата:

Сообщение от Dj_Alex (Сообщение 166980)
что-то imageTostring толком не работает
Вложение 11688
во второй строчке содержимое получамой строки
при другом изображении изменяются лишь символы после @

скрин с эмулятора, на телефоне строчка другая: javax.microedition.lcdui.Image@130b...

Да, как-то я это проглядел, метод возвращает не то, что нужно.
Посмотрю, как можно получить данные.

Deport 02.11.2012 15:05

Ответ: Загрузка изображений по HTTP
 
А как обрабатывать ошибки? например вот пример ошибки :
произошла ошибка из за того что изображение было удалено, но тогда в итоге мидлет намертво виснет...

Deport 02.11.2012 15:17

Ответ: Загрузка изображений по HTTP
 
мне удалось защитить библиотеку от попадания на несуществующие файлы но теперь другая ошибка,вот пример изображения из за которого вылетает ошибка: вот код который я использовал :
Код:


showcanvas;
x:=0;
a:=0;
b:=0;
c:=0;
repeat
open('http://m.megafonpro.ru/ml/upload/avatar/'+c+''+b+''+a+'/'+x+'._000_.jpg');
if get_error='' then set_method(GET);
if get_error='' then rc:=request;
if get_error='' then str:=get_data;
close;
ope:=get_data_bg;
if (rc=200) and (ope=1) then begin
    img:=Image_From_string(str);
    str:=del;
    img:=resize_image(img,getWidth,getHeight);
    DrawImage(img, 0, 0);
    img:=null;
    Repaint;
  end;
x:=x+1;
if (x>1) and (rc>200) or (rc<200) then begin
a:=a+1;
if a>9 then begin b:=b+1;a:=0;end;
if b>9 then begin c:=c+1;b:=0;end;
if c>9 then begin c:=0; end;
x:=1;
end;
until 1>2;



Часовой пояс GMT +4, время: 19:20.

vBulletin® Version 3.6.5.
Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
Перевод: zCarot