Вверх ↑
Этот топик читают: Гость
Ответов: 537
Рейтинг: 14
#1: 2017-01-24 01:26:55 ЛС | профиль | цитата
Например, скачивается с интернета картинка и она может быть большого размера в смысле в занимаемой памяти, много мегабайт, нужно сделать эскиз картинки скачанной с интернета, например уменьшить её с соблюдением размера сторон, чтобы на эскизе она смотрелась красиво, но уменьшенная копия занимала гораздо меньше памяти. Как это сделать без долгих расчетов? Или формула какая нужна, там нужно две стороны считать от исходной для уменьшения. Например большая сторона в ширину не может быть больше 236 точек. Вот компонент "image" хорошо уменьшает картинку, но не занимаемую память, а если этих картинок, уменьшенных, нужно больше ста и оригиналы не нужны, а просто помотреть эскизы, а так памяти жрет много. У меня было, 100 картинок, а потребляет памяти программы до 1 гига, а нужно просто посмотреть эскизы и выбрать картинки которые нужны и скачать заново которые подходят.
Вот если кто усовершенствует компонент "Resize", например, добавить возможность уменьшать картинку с соблюдением исходных пропорций и возможность выбора: уменьшить и удалить исходное изображение с памяти, или уменьшить и оставить оригинал в переменной, но наверное работы много, а я пока "владею делфи" - только на уровне новичка, могу из примера сделать себе разное.

Редактировалось 5 раз(а), последний 2017-01-24 02:14:09
карма: 4

0
vip
#1.1контекстная реклама от партнеров
Ответов: 198
Рейтинг: 2
#2: 2017-01-24 03:57:14 ЛС | профиль | цитата
Sersey писал(а):
Вот если кто усовершенствует компонент "Resize"...

Зачем его усовершенствовать? Там и так все есть.

Как-то так, если наглядно:


Add(MainForm,2953706,63,147)
{
Width=464
Height=592
}
Add(HTTPClient,12661902,245,217)
{
Point(doLoadStream)
Point(Stream)
link(URL,6502750:Text,[(251,209)(216,209)])
link(onFinish,7846593:doEvent1,[])
link(Stream,16397487:Var2,[])
}
Add(Thread,8193695,182,245)
{
Delay=100
FastStop=0
link(onExec,12661902:doLoadStream,[])
}
Add(MemoryStream,790357,259,140)
{
Point(doPosition)
}
Add(Hub,7846593,315,224)
{
OutCount=4
link(onEvent1,790357:doPosition,[(341,230)(341,195)(247,195)(247,160)])
link(onEvent2,11060859:doLoadFromStream,[])
link(onEvent3,11060859:doBitmap,[])
link(onEvent4,8019900:In,[])
}
Add(GetDataEx,16397487,259,175)
{
link(Data,790357:Stream,[])
}
Add(Jpeg,11060859,392,217)
{
Point(doLoadFromStream)
Point(doBitmap)
Point(Stream)
Point(Width)
Point(Height)
link(onBitmap,1340064:doLoad,[])
link(Stream,16397487:Var3,[(398,180)])
}
Add(Edit,6502750,210,168)
{
Left=10
Top=10
Width=355
Text="https://avatanplus.com/files/resources/original/576bb0ab7d47b1557caa1df9.jpg"
}
Add(Button,11592616,133,245)
{
Left=370
Top=10
Width=70
Caption="Загрузить"
link(onClick,8193695:doStart,[])
}
Add(LineBreak,8870497,210,147)
{
link(Out,790357:doClear,[])
Primary=[8019900,147,98]
}
Add(Resize,14096111,455,308)
{
link(onResult,2561044:doLoad,[])
link(Bitmap,1340064:ImageBitmap,[])
link(Width,15600128:Var,[])
link(Height,12470928:Var,[])
}
Add(Image,1340064,455,217)
{
Left=10
Top=45
Width=430
Height=215
ViewStyle=4
}
Add(Edit,13225990,399,350)
{
Left=190
Top=265
Text="236"
DataType=1
}
Add(Label,14194458,574,140)
{
Left=5
Top=265
Width=185
Height=20
Font=[MS Sans Serif,12,0,0,1]
Caption="Максимальная ширина"
AutoSize=1
}
Add(If_else,13786046,392,427)
{
Type=2
link(onTrue,6894813:doEvent1,[])
link(Op1,11842920:Var2,[])
link(Op2,15061549:Var2,[])
}
Add(Hub,6894813,448,427)
{
OutCount=3
link(onEvent1,2759388:doOperation,[])
link(onEvent2,16350758:doOperation,[(509,440)(509,510)])
link(onEvent3,8345291:In,[])
}
Add(GetDataEx,11842920,392,406)
{
link(Data,12750823:Var2,[])
}
Add(GetDataEx,15061549,399,399)
{
link(Data,13225990:Text,[])
}
Add(Image,2561044,504,308)
{
Left=5
Top=300
Width=430
Height=215
ViewStyle=4
}
Add(Math,2759388,532,427)
{
OpType=3
link(onResult,10485528:doOperation,[])
link(Op1,11842920:Var3,[(538,411)])
link(Op2,15061549:Var3,[(545,404)])
}
Add(Math,10485528,581,427)
{
OpType=3
link(Op1,12750823:Var3,[(587,397)])
link(Op2,14776419:Var3,[(594,414)(571,414)(571,471)])
}
Add(GetDataEx,12750823,392,392)
{
link(Data,11060859:Width,[])
}
Add(Math,16350758,525,504)
{
OpType=3
link(Op1,8522409:Var,[])
link(Op2,14776419:Var2,[])
}
Add(GetDataEx,14776419,532,466)
{
link(Data,2759388:Result,[])
}
Add(LineBreak,434537,399,259)
{
Type=1
link(Data,11060859:Height,[])
Primary=[8522409,126,217]
}
Add(LineBreak,15282896,581,469)
{
Type=1
link(Data,10485528:Result,[])
Primary=[15600128,-119,-210]
}
Add(LineBreak,3345367,525,546)
{
Type=1
link(Data,16350758:Result,[])
Primary=[12470928,-56,-266]
}
Add(LineBreak,1029238,413,308)
{
link(Out,14096111:doResize,[])
Primary=[8345291,63,133]
}
Add(Button,3182306,329,427)
{
Left=365
Top=265
Width=70
Caption="Resize"
link(onClick,13786046:doCompare,[])
}


После загрузки всех картинок - удаляешь все не нужное.
карма: 0

0
Ответов: 537
Рейтинг: 14
#3: 2017-01-24 05:27:39 ЛС | профиль | цитата
Та не. Загружается из интернета любое расширение картинки и сохраняется на жесткий диск, тоесть неизвестно какая картинка будет, с каким расширением .jpg, .png, gif, .jpeg. Картинки какие есть находятся в интернете по примерному названию с пока неизвестным расширенем и сохраняется одна картинка, потом добавляеся на форму с диска с помощью универсального компонента "img_loader", тоесть картина загружена в поток, а дальше её можно отобразить например, на форме в любом формате, взять из потока, в компоненте "image" он примет картинку и покажет, но если картина весит 25мб, то он покажет хоть и уменьшинную картинку, как выставил в настройках, все равно эти 25мб будут висеть в памяти, хотя мне нужна только маленькая, легкая картинка, которая только покажет, что там было на изображении.
Здесь не нужно соблюсти точный формат входящей картинки, нужно просто её уменьшить, например с 25мб, до 100кб и показать на форме.

Редактировалось 2 раз(а), последний 2017-01-24 05:38:14
карма: 4

0
Ответов: 198
Рейтинг: 2
#4: 2017-01-24 06:02:29 ЛС | профиль | цитата
Честно говоря не понятно.
Загружаете картинку, меняете ее размер компонентом "Resize" (ширина и высота картинки берутся в этом случае из "img_loader", вычисляются точно так же), отображаете на форме и удаляете исходную картинку.
После уменьшения разрешения картинки, она будет явно меньшего размера.

Или я что-то не так понимаю?

--- Добавлено в 2017-01-24 06:14:40

Add(MainForm,2953706,28,56)
{
Width=273
Height=389
Position=1
}
Add(Img_Loader,13649812,189,112)
{
Point(ImageWidth)
Point(ImageHeight)
link(onLoad,12598561:In,[])
}
Add(Image,10511273,504,112)
{
Left=10
Top=35
Width=236
Height=300
ViewStyle=4
}
Add(Button,16650151,77,112)
{
Left=10
Top=5
Width=95
Caption="Загрузить"
link(onClick,5538248:doExecute,[])
}
Add(Edit,13225990,203,196)
{
Left=200
Top=5
Text="236"
DataType=1
}
Add(If_else,13786046,196,273)
{
Type=2
link(onTrue,6894813:doEvent1,[])
link(onFalse,5623892:In,[])
link(Op1,11842920:Var2,[])
link(Op2,15061549:Var2,[])
}
Add(Hub,6894813,287,273)
{
OutCount=3
link(onEvent1,2759388:doOperation,[])
link(onEvent2,16350758:doOperation,[(348,286)(348,356)])
link(onEvent3,8345291:In,[])
}
Add(GetDataEx,11842920,196,252)
{
link(Data,12750823:Var2,[])
}
Add(GetDataEx,15061549,203,245)
{
link(Data,13225990:Text,[])
}
Add(Math,2759388,371,273)
{
OpType=3
link(onResult,10485528:doOperation,[])
link(Op1,11842920:Var3,[(377,257)])
link(Op2,15061549:Var3,[(384,250)])
}
Add(GetDataEx,12750823,196,238)
{
link(Data,13649812:ImageWidth,[])
}
Add(Math,16350758,364,350)
{
OpType=3
link(Op1,8522409:Var,[])
link(Op2,14776419:Var2,[])
}
Add(GetDataEx,14776419,371,312)
{
link(Data,2759388:Result,[])
}
Add(LineBreak,3955075,203,161)
{
Type=1
link(Data,13649812:ImageHeight,[])
Primary=[8522409,161,161]
}
Add(LineBreak,5177410,364,392)
{
Type=1
link(Data,16350758:Result,[])
Primary=[12470928,56,-308]
}
Add(LineBreak,2366783,364,112)
{
link(Out,14096111:doResize,[])
Primary=[8345291,-49,175]
}
Add(Math,10485528,420,273)
{
OpType=3
link(Op1,12750823:Var3,[(426,243)])
link(Op2,14776419:Var3,[(433,260)(410,260)(410,317)])
}
Add(LineBreak,13895303,420,315)
{
Type=1
link(Data,10485528:Result,[])
Primary=[15600128,-7,-252]
}
Add(Resize,14096111,406,112)
{
link(onResult,4547192:doEvent1,[])
link(Bitmap,958095:Var,[])
link(Width,15600128:Var,[])
link(Height,12470928:Var,[])
}
Add(LineBreak,4413165,168,161)
{
Type=1
link(Data,336864:Var2,[])
Primary=[958095,238,-119]
}
Add(ODialog,5538248,126,112)
{
link(onExecute,13649812:doLoad,[])
}
Add(LineBreak,438083,147,273)
{
link(Out,13786046:doCompare,[])
Primary=[12598561,126,-161]
}
Add(DoData,94179,406,175)
{
link(onEventData,4547192:doEvent2,[(454,181)(454,125)])
link(Data,15067580:Var,[])
}
Add(LineBreak,6192300,133,161)
{
Type=1
link(Data,336864:Var1,[(139,153)])
Primary=[15067580,273,-7]
}
Add(GetDataEx,336864,168,148)
{
Angle=1
link(Data,13649812:Bitmap,[(195,153)])
}
Add(Hub,4547192,469,112)
{
InCount=2
OutCount=1
link(onEvent1,10511273:doLoad,[])
}
Add(LineBreak,1674775,364,175)
{
link(Out,94179:doData,[])
Primary=[5623892,-126,105]
}


Дальше просто загружаете и уменьшаете следующую картинку

Редактировалось 2 раз(а), последний 2017-01-24 06:17:48
карма: 0

0
Ответов: 497
Рейтинг: 16
#5: 2017-01-24 09:44:43 ЛС | профиль | цитата
верно.
тест
Make(delphi)
ver(4.04 build 185)
Add(MainForm,2953706,210,112)
{
Point(doPicture)
}
Add(Jpeg,12895050,658,203)
{
Quality=100
Point(doLoadFromStream)
Point(doLoadFromBitmap)
Point(FileName)
Point(Quality)
link(FileName,15153590:Var2,[])
}
Add(Math,1506914,364,147)
{
OpType=3
Op2=10
ResultType=0
link(Op1,8383226:ImageHeight,[])
link(Op2,3359719:Var1,[(377,128)])
}
Add(Math,5630080,371,196)
{
OpType=3
Op2=10
ResultType=0
link(Op1,8383226:ImageWidth,[])
link(Op2,3359719:Var2,[(384,164)(510,164)])
}
Add(Hub,14722539,413,77)
{
InCount=2
OutCount=3
link(onEvent1,1506914:doOperation,[(439,83)(439,118)(352,118)(352,153)])
link(onEvent2,5630080:doOperation,[(439,90)(439,146)(359,146)(359,202)])
link(onEvent3,14450467:doResize,[(462,97)(462,223)])
}
Add(Resize,14450467,497,217)
{
Width=32
Height=32
HalfTone=1
link(onResult,5973360:doEvent1,[])
link(Bitmap,8383226:Bitmap,[(503,159)(363,159)])
link(Width,5630080:Result,[(510,205)(444,205)(444,240)(377,240)])
link(Height,1506914:Result,[(517,198)(370,198)])
}
Add(Hub,5973360,602,217)
{
OutCount=4
link(onEvent1,12895050:doLoadFromStream,[])
link(onEvent2,12895050:doLoadFromBitmap,[])
link(onEvent3,12895050:doSave,[(637,237)(637,216)])
link(onEvent4,8108615:doEvent1,[(644,244)(644,265)])
}
Add(ODialog,13005962,252,21)
{
link(onExecute,4414962:doValue,[])
}
Add(Memory,4414962,315,21)
{
link(onData,3363437:doEvent1,[])
}
Add(Hub,3363437,371,21)
{
link(onEvent1,5235734:doPart,[])
link(onEvent2,8383226:doLoad,[(397,34)(397,55)(345,55)(345,76)])
}
Add(FilePartElm,5235734,490,21)
{
Mode=2
link(onPart,3776910:doStrCat,[])
}
Add(StrCat,3776910,546,21)
{
Str2=".tmp"
}
Add(Button,10346984,175,21)
{
Left=5
Top=10
link(onClick,13005962:doExecute,[])
}
Add(Image,5638052,784,259)
{
Left=10
Top=40
Width=365
Height=210
}
Add(Img_Loader,8383226,357,70)
{
Point(ImageHeight)
Point(ImageWidth)
Point(doSize)
Point(onSize)
link(onLoad,8383226:doSize,[(401,76)(401,80)(345,80)(345,83)])
link(FileName,4414962:Value,[(363,62)(321,62)])
link(onSize,14722539:doEvent1,[])
}
Add(Jpeg,2992045,707,259)
{
Point(FileName)
Point(doBitmap)
link(onBitmap,5638052:doLoad,[])
link(FileName,15153590:Var3,[(713,166)])
}
Add(GetDataEx,15153590,658,161)
{
link(Data,3776910:Result,[(664,142)(552,142)])
}
Add(TrackBarRush,9631451,525,77)
{
Left=70
Top=5
Width=310
Max=100
Min=1
Position=10
ThumbLength=16
link(onPosition,14722539:doEvent2,[(569,83)(569,87)(401,87)(401,90)])
}
Add(Hub,8108615,672,259)
{
link(onEvent1,2992045:doLoad,[])
link(onEvent2,2992045:doBitmap,[(696,272)(696,279)])
}
Add(GetDataEx,3359719,504,123)
{
Angle=1
link(Data,9631451osition,[(531,128)])
}


ну или если не вмоготу очистить память можно у проводника их воровать
карма: 1
        ]  
0
Ответов: 537
Рейтинг: 14
#6: 2017-01-24 10:43:33 ЛС | профиль | цитата
А зачем 2 раза сохранять файл, а потом, ещё, его 2 раза конвертировать? Бедный комп.
СЛАВА ЖЕЛЕЗУ
карма: 4

0
Ответов: 18
Рейтинг: 0
#7: 2017-02-02 22:34:30 ЛС | профиль | цитата
http://forum.hiasm.com/getfile/38014
карма: 1

0
Ответов: 16884
Рейтинг: 1239
#8: 2017-02-03 00:10:51 ЛС | профиль | цитата
Да...
карма: 25
Немного терпения! Дежурный экстрасенс скоро свяжется с Вами!
0
Разработчик
Ответов: 26066
Рейтинг: 2120
#9: 2017-02-03 02:32:59 ЛС | профиль | цитата
Можно использовать новый штатный компонент Img_GDIFileProcessor. Он позволяет из картинок вытаскивать их эскизы.

Схема


Add(MainForm,2953706,98,77)
{
Width=229
Height=245
Position=1
}
Add(Image,4537805,259,119)
{
Left=10
Top=10
Width=195
Height=150
}
Add(Img_GDIFileProcessor,2381384,203,112)
{
Saveformat=2
Quality=95
ThumbnailSize=100
Point(onGetThumb)
Point(FrameCount)
Point(doGetThumbFrom)
link(onGetThumb,4537805:doLoad,[])
}
Add(Button,5309113,98,126)
{
Left=45
Top=170
Width=120
TabOrder=-1
Ctl3D=0
WinStyle=1
Caption="GetThumbFromFile"
link(onClick,9379140:doExecute,[])
}
Add(ODialog,9379140,147,126)
{
Filter="All Image Files|*.bmp;*.gif;*.ico;*wmf;*.emf;*.tif;*.png;*.jpg;*.jpeg|BMP (*.bmp)|*.bmp|JPG (*.jpg, *.jpeg)|*.jpg;*.jpeg|GIF (*.gif)|*.gif|TIFF (*.tif)|*.tif|PNG (*.png)|*.png|ICO (*.ico)|*.ico|EMF (*.emf)|*.emf|WMF (*.wmf)|*.wmf|All files (*.*)|*.*"
FileName=""
link(onExecute,2381384:doGetThumbFrom,[])
}
карма: 22

1
Голосовали:Sersey
9
Сообщение
...
Прикрепленные файлы
(файлы не залиты)