کوچک کردن فایل jpg در FileStream
سلام دوستان
در برنامه ای با استفاده از FileStream فایلی را باز میکنم و در دیتابیس ذخیره میکنم.
بعضی از فایلهای jpg بزرگ هستند و من میخواهم سایز کوچکتر ذخیره کنم:
var
sFile:TFileStream;
Ret:TThrMessageParam;
JPG:TJPEGImage;
BMP:TBitmap;
Scale:Real;
begin
sFile:=TFileStream.Create(FileName,fmOpenRead);
if IsThumb then begin
JPG:=TJPEGImage.Create;
JPG.LoadFromStream(sFile);
BMP:=TBitmap.Create;
if (JPG.Width>ThumbMaxWidth)or(JPG.Height>ThumbMaxHei ght) then
if (JPG.Width/ThumbMaxWidth)>(JPG.Height/ThumbMaxHeight) then
Scale:=JPG.Width/ThumbMaxWidth
else
Scale:=JPG.Height/ThumbMaxHeight
else
Scale:=1;
BMP.Width:=Round(JPG.Width/Scale);
BMP.Height:=Round(JPG.Height/Scale);
Bmp.Canvas.StretchDraw(Rect(0,0,BMP.Width,BMP.Heig ht), JPG);
JPG.Assign(BMP);
JPG.SaveToFile('d:\aa.jpg');
JPG.SaveToStream(sFile);
BMP.Free;
JPG.Free;
end;
در این خط که به صورت آزمایشی نوشته ام، فایل کوچک شده به درستی ذخیره میشود
JPG.SaveToFile('d:\aa.jpg');
اما در خط بعد:
JPG.SaveToStream(sFile);
انتظار دارم محتویات فایل کوچک شده در sFile ذخیره شود که در ادامه برنامه در دیتابیس ذخیره شود. اما فایل اصلی در دیتابیس ذخیره میشود!!
لطفا راهنمایی کنید مشکل از کجاست؟
نقل قول: کوچک کردن فایل jpg در FileStream
از TZCompressionStream و TZDecompressionStream استفاده کن
procedure TForm1.btnCompressClick(Sender: TObject);
var
LInput, LOutput: TFileStream;
LZip: TZCompressionStream;
begin
{ Create the Input, Output, and Compressed streams. }
LInput := TFileStream.Create(Edit1.Text, fmOpenRead);
LOutput := TFileStream.Create(Edit2.Text + '.zip', fmCreate);
LZip := TZCompressionStream.Create(clDefault, LOutput);
{ Compress data. }
LZip.CopyFrom(LInput, LInput.Size);
{ Free the streams. }
LZip.Free;
LInput.Free;
LOutput.Free;
end;
procedure TForm1.btnDecompressClick(Sender: TObject);
var
LInput, LOutput: TFileStream;
LUnZip: TZDecompressionStream;
begin
{ Create the Input, Output, and Decompressed streams. }
LInput := TFileStream.Create(Edit1.Text, fmOpenRead);
LOutput := TFileStream.Create(ChangeFileExt(Edit1.Text, 'txt'), fmCreate);
LUnZip := TZDecompressionStream.Create(LInput);
{ Decompress data. }
LOutput.CopyFrom(LUnZip, 0);
{ Free the streams. }
LUnZip.Free;
LInput.Free;
LOutput.Free;
end;
نقل قول: کوچک کردن فایل jpg در FileStream
خود JPG دستور کمپرس هم دارد
1 ضمیمه
نقل قول: کوچک کردن فایل jpg در FileStream
نقل قول:
نوشته شده توسط
دلفــي
از
TZCompressionStream و TZDecompressionStream استفاده کن
procedure TForm1.btnCompressClick(Sender: TObject);
var
LInput, LOutput: TFileStream;
LZip: TZCompressionStream;
begin
{ Create the Input, Output, and Compressed streams. }
LInput := TFileStream.Create(Edit1.Text, fmOpenRead);
LOutput := TFileStream.Create(Edit2.Text + '.zip', fmCreate);
LZip := TZCompressionStream.Create(clDefault, LOutput);
{ Compress data. }
LZip.CopyFrom(LInput, LInput.Size);
{ Free the streams. }
LZip.Free;
LInput.Free;
LOutput.Free;
end;
procedure TForm1.btnDecompressClick(Sender: TObject);
var
LInput, LOutput: TFileStream;
LUnZip: TZDecompressionStream;
begin
{ Create the Input, Output, and Decompressed streams. }
LInput := TFileStream.Create(Edit1.Text, fmOpenRead);
LOutput := TFileStream.Create(ChangeFileExt(Edit1.Text, 'txt'), fmCreate);
LUnZip := TZDecompressionStream.Create(LInput);
{ Decompress data. }
LOutput.CopyFrom(LUnZip, 0);
{ Free the streams. }
LUnZip.Free;
LInput.Free;
LOutput.Free;
end;
با سلام
ضمیمه 155657
نقل قول: کوچک کردن فایل jpg در FileStream
نقل قول:
نوشته شده توسط
دلفــي
از
TZCompressionStream و TZDecompressionStream استفاده کن
procedure TForm1.btnCompressClick(Sender: TObject);
var
LInput, LOutput: TFileStream;
LZip: TZCompressionStream;
begin
{ Create the Input, Output, and Compressed streams. }
LInput := TFileStream.Create(Edit1.Text, fmOpenRead);
LOutput := TFileStream.Create(Edit2.Text + '.zip', fmCreate);
LZip := TZCompressionStream.Create(clDefault, LOutput);
{ Compress data. }
LZip.CopyFrom(LInput, LInput.Size);
{ Free the streams. }
LZip.Free;
LInput.Free;
LOutput.Free;
end;
procedure TForm1.btnDecompressClick(Sender: TObject);
var
LInput, LOutput: TFileStream;
LUnZip: TZDecompressionStream;
begin
{ Create the Input, Output, and Decompressed streams. }
LInput := TFileStream.Create(Edit1.Text, fmOpenRead);
LOutput := TFileStream.Create(ChangeFileExt(Edit1.Text, 'txt'), fmCreate);
LUnZip := TZDecompressionStream.Create(LInput);
{ Decompress data. }
LOutput.CopyFrom(LUnZip, 0);
{ Free the streams. }
LUnZip.Free;
LInput.Free;
LOutput.Free;
end;
مشکل من فشرده سازی نیست! من می خواهم عکس را کوچک کنم. در واقع میخواهم عکس ورودی با هر سایزی را حداکثر 90*60 کنم. تقریبا با کدی که نوشته ام انجام داده ام. اما با این کد اندازه فایل در استریم تغییر نمیکند! ولی وقتی با JPG.SaveToFile('d:\aa.jpg') ذخیره میکنم کوچک شده است!!!!
نقل قول: کوچک کردن فایل jpg در FileStream
نقل قول:
نوشته شده توسط
masoode
مشکل من فشرده سازی نیست! من می خواهم عکس را کوچک کنم. در واقع میخواهم عکس ورودی با هر سایزی را حداکثر 90*60 کنم. تقریبا با کدی که نوشته ام انجام داده ام. اما با این کد اندازه فایل در استریم تغییر نمیکند! ولی وقتی با JPG.SaveToFile('d:\aa.jpg') ذخیره میکنم کوچک شده است!!!!
JPG.Assign(BMP);
JPG.CompressionQuality := 80;
JPG.Compress;
نقل قول: کوچک کردن فایل jpg در FileStream
نقل قول:
نوشته شده توسط
masoode
مشکل من فشرده سازی نیست! من می خواهم عکس را کوچک کنم. در واقع میخواهم عکس ورودی با هر سایزی را حداکثر 90*60 کنم. تقریبا با کدی که نوشته ام انجام داده ام. اما با این کد اندازه فایل در استریم تغییر نمیکند! ولی وقتی با JPG.SaveToFile('d:\aa.jpg') ذخیره میکنم کوچک شده است!!!!
می تونید از توابعی مثل BitBlt استفاده کنید