Вверх ↑
Этот топик читают: Гость
Ответов: 537
Рейтинг: 14
#1: 2018-01-27 01:47:41 ЛС | профиль | цитата
Как быть когда загружаемое изображение по ссылке с интернета не имеет расширения в конце ссылки, например - http://site.ru/image.jpg, здесь понятно какое расширение картинки и как ее сохранять с каким расширением, а если в ссылке нет этого расширения, то как его можно определить
Вот схема и там ссылка просто на картинку
Add(MainForm,2953706,21,105)
{
}
Add(Thread,2164425,175,140)
{
Delay=100
FastStop=0
Point(doStopFlag)
link(onExec,3703317:doLoadStream,[])
}
Add(HTTPClient,3703317,231,112)
{
Point(doLoadStream)
Point(Stream)
link(URL,1518095:Text,[])
link(onFinish,1709144:doLoadFrom,[])
link(Stream,1106865:Var2,[])
}
Add(Img_GDIFileProcessor,1709144,371,119)
{
Method=1
Saveformat=2
Quality=95
ThumbnailSize=100
Point(Stream)
link(onLoad,629316:doLoad,[])
link(Stream,1106865:Var3,[(391,96)])
}
Add(Button,15119675,112,140)
{
Left=50
Top=160
link(onClick,2164425:doStart,[])
}
Add(VisualStrings,1518095,231,70)
{
Lines=#104:https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQS8E_e42vFKtF1164erbGDBDfYkLZZw4tQBbFHbvKEQQnDMI95|
Width=354
}
Add(Image,629316,455,119)
{
Width=190
Height=135
}
Add(MemoryStream,13699278,245,28)
{
}
Add(GetDataEx,1106865,245,91)
{
link(Data,13699278:Stream,[])
}

Как можно определить расширение таких непонятных картинок? Просто у меня программа, так она ищет только ссылки на ссылки с известными расширениями, скачивает в память и показывает на форме, а остальные игнорит, просто эффективность программы увеличится если она будет брать все ссылки на изображения которые дает ей гуглик. Просто стоит фильтр, что если ссылка не заканчивается на известные форматы, то сайт пропускается. А если брать все подряд, то бывает неизвестные расширения, а там и ошибки могут быть. Схема очень большая на 2111 элементов, но пока держится, но бывает брыкается

П.С.
Может это кодировка ссыки какая то, может можно перекодировать последние символы, чтобы узнать расширение
tbn:ANd9GcQS8E_e42vFKtF1164erbGDBDfYkLZZw4tQBbFHbvKEQQnDMI95 этой ссыки. Можно конечно сохранить с например .jpg но если потом открыть, а там по настоящему другое расширение, то ошибки

Редактировалось 2 раз(а), последний 2018-01-27 02:05:47
карма: 4

0
vip
#1.1контекстная реклама от партнеров
Разработчик
Ответов: 26061
Рейтинг: 2120
#2: 2018-01-27 02:17:26 ЛС | профиль | цитата
Sersey писал(а):
Как можно определить расширение таких непонятных картинок?

Внимательно разобрать пример по Img_GDIFileProcessor, там все это есть -- %HiAsm%\Elements\Delphi\Example\Image\Img_GDIFileProcessor.sha
карма: 22

1
Голосовали:Sersey
Ответов: 537
Рейтинг: 14
#3: 2018-01-27 02:29:19 ЛС | профиль | цитата
Точка doGetParamFrom? В MT потоке. Ни че се вы калькулятор придумали, мощь! Просто пример я не видел, элемент недавно появился, теперь без глюков, если попробовать дать поврежденную картинку или вообще не картинку, ошибок нет.
Отлично

Редактировалось 6 раз(а), последний 2018-01-27 03:08:11
карма: 4

0
Ответов: 497
Рейтинг: 16
#4: 2018-01-28 01:55:05 ЛС | профиль | цитата
очень часто в заголовках ответа сервера есть информация о содержимом
Content-Type:image/png или подобное

Редактировалось 1 раз(а), последний 2018-01-28 03:03:58
карма: 1
        ]  
0
Ответов: 497
Рейтинг: 16
#5: 2018-01-28 03:40:57 ЛС | профиль | цитата
или заголовки HTTP(но бывает что сервер жлоб и потому работает не всегда)например сервер hiasm (пример с сигнатурой ↓ ↓ ↓ ↓)


Add(Thread,2164425,469,294)
{
Delay=100
FastStop=0
Point(doStopFlag)
link(onExec,3703317:doLoadStream,[])
}
Add(HTTPClient,3703317,525,266)
{
Point(doLoadStream)
Point(Stream)
Point(RawHeaders)
link(URL,1518095:Text,[])
link(onHeadersAvail,9675821:doEnum,[(569,272)(569,314)(534,314)(534,356)])
link(onFinish,1709144:doLoadFrom,[])
link(Stream,1106865:Var2,[])
}
Add(Img_GDIFileProcessor,1709144,665,273)
{
Method=1
Saveformat=2
Quality=95
ThumbnailSize=100
Point(Stream)
link(onLoad,629316:doLoad,[])
link(Stream,1106865:Var3,[(685,250)])
}
Add(Button,15119675,406,294)
{
Left=50
Top=160
link(onClick,2164425:doStart,[])
}
Add(VisualStrings,1518095,525,224)
{
Lines=#104:https://encrypted-tbn0.gstatic.com/images?q=tbn:ANd9GcQS8E_e42vFKtF1164erbGDBDfYkLZZw4tQBbFHbvKEQQnDMI95|
Width=354
}
Add(Image,629316,749,273)
{
Width=190
Height=135
}
Add(MemoryStream,13699278,539,182)
{
}
Add(GetDataEx,1106865,539,245)
{
link(Data,13699278:Stream,[])
}
Add(Str_Enum,9675821,546,350)
{
Delimiter="\r\n"
link(onEnum,3256822:doCompare,[])
link(String,3703317:RawHeaders,[])
}
Add(StrMask,3256822,588,350)
{
Mask="*Content-Type:*"
link(onTrue,3538293:doSearch,[])
}
Add(Position,3538293,630,357)
{
Target="image/"
ShortSearch=1
link(onSearch,6227000:doOperation,[])
}
Add(Copy,5910021,714,357)
{
Count=4
link(onCopy,6698025:doMessage,[])
link(Str,9675821:Part,[(720,337)(514,337)(514,394)(559,394)])
}
Add(Math,6227000,672,357)
{
Op2=6
link(onResult,5910021:doCopy,[])
}
Add(Message,6698025,784,357)
{
}


ну или сигнатура 100% способ но тяжелее немножко

Add(Thread,2164425,469,294)
{
Delay=100
FastStop=0
Point(doStopFlag)
link(onExec,3703317:doLoadStream,[(513,300)(513,307)])
}
Add(HTTPClient,3703317,525,273)
{
Point(doLoadStream)
Point(Stream)
Point(RawHeaders)
link(URL,1518095:Text,[])
link(onFinish,1758550:doEvent1,[])
link(Stream,1106865:Var2,[])
}
Add(Img_GDIFileProcessor,1709144,693,287)
{
Method=1
Saveformat=2
Quality=95
ThumbnailSize=100
Point(Stream)
link(onLoad,629316:doLoad,[])
link(Stream,13153526:Var3,[(713,250)])
}
Add(Button,15119675,406,294)
{
Left=50
Top=160
link(onClick,2164425:doStart,[])
}
Add(VisualStrings,1518095,525,224)
{
Lines=#40:http://forum.hiasm.com/img/avatars/21544|
Width=354
}
Add(Image,629316,770,287)
{
Width=190
Height=135
}
Add(MemoryStream,13699278,539,182)
{
}
Add(GetDataEx,1106865,539,245)
{
link(Data,13699278:Stream,[])
}
Add(StreamConvertor,11798229,602,280)
{
Point(Data)
link(onResult,9258393:doCopy,[(643,286)(643,181)])
link(Data,13153526:Var2,[])
}
Add(GetDataEx,13153526,602,245)
{
Angle=3
link(Data,1106865:Var3,[])
}
Add(Copy,9258393,672,175)
{
Count=8
link(onCopy,2015640:doConvert,[])
}
Add(StreamConvertor,2015640,742,175)
{
Mode=3
link(onResult,13239098:doMessage,[])
}
Add(Hub,1758550,574,280)
{
InCount=2
link(onEvent1,11798229:doConvert,[])
link(onEvent2,1709144:doLoadFrom,[])
}
Add(Message,13239098,791,175)
{
}

карма: 1
        ]  
0
5
Сообщение
...
Прикрепленные файлы
(файлы не залиты)