Merhaba arkadaşlar.
Elimde bulunan resimleri yazdığım program aracılığıyla internette bi alana atıyorum.
Ancak resimleri internete gönderirken resmin boyutunu çözünürlüğünü vs. küçültmem ve ağırlığını compress etmem gerekiyor (Resim kareleşmeden).
Bu işlemi forumda yazılanlara göre yapmaya çalıştım ama birtürlü beceremedim. Forumda baya bi arama yaptım hemen hemen bütün örnekleri denedim ama olmuyor.
Ya dosya bozuluyor hiç açılmıyor yada yazılan örneklerdeki kodlar hata veriyor.
Daha önce böyle bir işlem yapmış olan arkadaşlar varsa yardımcı olabilirmi.
Not: Delphi 2007 kullanıyorum.
İmaj Compress
Forum kuralları
Forum kurallarını okuyup, uyunuz!
Forum kurallarını okuyup, uyunuz!
Re: İmaj Compress
Aşağıda bir TImage içerisindeki resmi veritabanına kaydetmeye yarayan bir örnek var. Bu kod kalıbını ben yıllardır kullanıyorum. Bu örneği inceleyin ve kendi programınıza uygulayın. Takıldığınız yerlerde beraber çözmeye çalışalım. Örnekte Jedi Code Library içerisindeki JclGraphics uniti kullanılmıştır.
********** NOTLAR ******************
* Form üzerinde TDBImage değil normal TImage var.
* JCLGraphics, Jedi Code Library nin bir parçasıdır.
Kod: Tümünü seç
uses Db, Jpeg, ClipBrd, DBISAMTb, JclGraphics;
// *********************** KAYDEDERKEN *******************
var
Stream1: TDBISAMBlobStream; // BDE için TBlobStream kullanılmalı, diğer
DB'ler için de bir karşılığı vardır sanırım.
Jpeg1: TJpegImage;
var
Oran, OranW, OranH : Real;
CompressedImage: TImage;
// RESİM BOYUTLANDIR
if Image1.Picture.Graphic<>nil then
begin
if (Image1.Picture.Graphic.Width >100) or
(Image1.Picture.Graphic.Height>130) then
begin
// ShowMessage('Genişlik: '+IntToStr(Image1.Picture.Graphic.Width)+'
Yükseklik: '+IntToStr(Image1.Picture.Graphic.Height));
CompressedImage:=TImage.Create(Self);
OranW:=100/Image1.Picture.Graphic.Width;
OranH:=130/Image1.Picture.Graphic.Height;
if OranW>OranH then Oran:=OranH else Oran:=OranW;
Stretch(Round(Image1.Picture.Graphic.Width*Oran),
Round(Image1.Picture.Graphic.Height*Oran),
rfBell, 1, Image1.Picture.Graphic,
CompressedImage.Picture.Bitmap);
Image1.Picture.Bitmap.Assign(CompressedImage.Picture.Bitmap);
CompressedImage.Free;
// ShowMessage('Küçültüldü Genişlik:
'+IntToStr(Image1.Picture.Bitmap.Width)+' Yükseklik:
'+IntToStr(Image1.Picture.Bitmap.Height));
end;
end;
// JPEG FORMATINA ÇEVİR
try
Stream1:=TDBISAMBlobStream.Create(DM.PersonelRESIMJPG, bmWrite);
Jpeg1:=TJpegImage.Create;
if Image1.Picture.Graphic<>nil then
begin
if not Image1.Picture.Graphic.Empty then
begin
if Image1.Picture.Graphic is TJpegImage then
begin
Image1.Picture.Graphic.SaveToStream(Stream1);
// ShowMessage('O bir jpeg. size='+IntToStr(Stream1.Size));
end else begin
Jpeg1.Assign(Image1.Picture.Graphic);
Jpeg1.Compress;
Jpeg1.SaveToStream(Stream1);
// ShowMessage('O bir jpeg değil. size='+IntToStr(Stream1.Size));
end;
end;
end;
finally
Jpeg1.Free;
Stream1.Free;
end;
// *********************** OKURKEN *******************
// Resim Aç
if not DM.PersonelRESIMJPG.IsNull then
begin
try
Stream1:=TDBISAMBlobStream.Create(DM.PersonelRESIMJPG, bmRead);
Jpeg1:=TJpegImage.Create;
Jpeg1.LoadFromStream(Stream1);
Image1.Picture.Bitmap.Assign(Jpeg1);
finally
Jpeg1.Free;
Stream1.Free;
end;
end else begin
Image1.Picture.Graphic:=nil;
end;
* Form üzerinde TDBImage değil normal TImage var.
* JCLGraphics, Jedi Code Library nin bir parçasıdır.
C. Sunguray
csunguray at netbilisim.kom
Net Bilişim Hizmetleri
Sıradan her programcı bilgisayarın anlayabileceği kodlar yazabilir.
Sadece iyi programcılar insanların da anlayabileceği kodlar yazarlar.
Martin Fowler (http://martinfowler.com/)
csunguray at netbilisim.kom
Net Bilişim Hizmetleri
Sıradan her programcı bilgisayarın anlayabileceği kodlar yazabilir.
Sadece iyi programcılar insanların da anlayabileceği kodlar yazarlar.
Martin Fowler (http://martinfowler.com/)
Re: İmaj Compress
Hocam ellirinize sağlık.
Bazı problemlerim var kodu çalıştırırken hocam. Şimdi siz bu kodu veritabnına imaj kaydetmek için yazmışsınız. Ancak ben veri tabanına değilde mesela c: nin altına
kaydetmek istiyorum. (aslında internette bi alana ftp ile atıyorum);
şimdi:
Stream1:=TDBISAMBlobStream.Create(DM.PersonelRESIMJPG, bmWrite); buradaki kodu ne yapmalıyımki c: nin içine kaydetsin.
zaten uses "DBISAMTb" ve Stream1: TDBISAMBlobStream; hata veriyor
([DCC Error] Unit8.pas(7): F1026 File not found: 'DBISAMTb.dcu') delphi 2007 de çalıştırıyorum. veri tabanına kayıt yaptırmayacağım için
bu dosyayı aramama gerek yok.
Tekrar tekrar teşekürler hocam.
Bazı problemlerim var kodu çalıştırırken hocam. Şimdi siz bu kodu veritabnına imaj kaydetmek için yazmışsınız. Ancak ben veri tabanına değilde mesela c: nin altına
kaydetmek istiyorum. (aslında internette bi alana ftp ile atıyorum);
şimdi:
Stream1:=TDBISAMBlobStream.Create(DM.PersonelRESIMJPG, bmWrite); buradaki kodu ne yapmalıyımki c: nin içine kaydetsin.
zaten uses "DBISAMTb" ve Stream1: TDBISAMBlobStream; hata veriyor
([DCC Error] Unit8.pas(7): F1026 File not found: 'DBISAMTb.dcu') delphi 2007 de çalıştırıyorum. veri tabanına kayıt yaptırmayacağım için
bu dosyayı aramama gerek yok.
Tekrar tekrar teşekürler hocam.
Re: İmaj Compress
İlk olarak DBIsamTB'yi uses listesinden kaldır.
Stream1 i de sil. Bir resmi C: ye kaydetmek istiyorsan Image1.SaveToFile ile kaydedebilirsin. Daha sonrasında bir ftp ye yüklemek istiyorsan Indy bileşenlerini (TIdFtp) kullanarak bunu yapabilirsin.
Stream1 i de sil. Bir resmi C: ye kaydetmek istiyorsan Image1.SaveToFile ile kaydedebilirsin. Daha sonrasında bir ftp ye yüklemek istiyorsan Indy bileşenlerini (TIdFtp) kullanarak bunu yapabilirsin.
Kod: Tümünü seç
Ftp1.Host:=FtpServer.Text;
Ftp1.Username:=FtpUser.Text;
Ftp1.Password:=FtpPassword.Text;
try
EditMesaj.Caption:='İnternet: Bağlantı kuruluyor...';
Application.ProcessMessages;
FTP1.Connect;
except
EditMesaj.Caption:='İnternet: Bağlantı kurulamadı...';
Application.ProcessMessages;
ShowMessage('Bağlantı başarısız!');
Ftp1.Disconnect;
Exit;
end;
try
EditMesaj.Caption:='İnternet: Kullanıcı adı ve şifre doğrulanıyor...';
Application.ProcessMessages;
Ftp1.Login;
except
EditMesaj.Caption:='İnternet: Yanlış kullanıcı adı veya şifre...';
Application.ProcessMessages;
ShowMessage('Kullanıcı adı/şifre hatası!');
Ftp1.Disconnect;
Exit;
end;
if FtpDir.Text>'' then
begin
try
EditMesaj.Caption:='İnternet: Klasöre konumlanılıyor...';
Application.ProcessMessages;
Ftp1.ChangeDir(FtpDir.Text);
except
EditMesaj.Caption:='İnternet: Klasör bulunamadı...';
Application.ProcessMessages;
ShowMessage('Belirtilen klasör bulunamadı!');
Ftp1.Disconnect;
Exit;
end;
end;
try
EditMesaj.Caption:='İnternet: Yükleme yapılıyor...';
Ftp1.Put('.\dys.mdb', 'dys.mdb');
EditMesaj.Caption:='İnternet: Yükleme başarıyla tamamlandı...';
// ShowMessage('İnternet: Yükleme başarıyla tamamlandı...');
except
EditMesaj.Caption:='İnternet: Yükleme başarısız...';
ShowMessage('Yükleme başarısız!');
Ftp1.Disconnect;
Exit;
end;
Ftp1.Disconnect;
C. Sunguray
csunguray at netbilisim.kom
Net Bilişim Hizmetleri
Sıradan her programcı bilgisayarın anlayabileceği kodlar yazabilir.
Sadece iyi programcılar insanların da anlayabileceği kodlar yazarlar.
Martin Fowler (http://martinfowler.com/)
csunguray at netbilisim.kom
Net Bilişim Hizmetleri
Sıradan her programcı bilgisayarın anlayabileceği kodlar yazabilir.
Sadece iyi programcılar insanların da anlayabileceği kodlar yazarlar.
Martin Fowler (http://martinfowler.com/)
Re: İmaj Compress
Hocam problemi biraz uğraşınca çözdüm. 
şöyleki:
Stream1:=TDBISAMBlobStream ---> Stream1: TMemoryStream; bu şekilde değiştirdim.
Stream1:=TDBISAMBlobStream.Create(DM.PersonelRESIMJPG, bmWrite); --->
OpenDialog1.Execute;
Stream1:=TMemoryStream.Create;
stream1.LoadFromFile(OpenDialog1.FileName); şeklinde değiştirdim.
Kaydetme işleminide:
Jpeg1.SaveToStream(Stream1);
SaveDialog1.Execute;
jpeg1.SaveToFile(SaveDialog1.FileName); diye değiştirince olay çözüldü hocam....
Diğer arkadaşlara örnek teşkiletmesi açısından tam kodu aşağıya ekliyorum.

şöyleki:
Stream1:=TDBISAMBlobStream ---> Stream1: TMemoryStream; bu şekilde değiştirdim.
Stream1:=TDBISAMBlobStream.Create(DM.PersonelRESIMJPG, bmWrite); --->
OpenDialog1.Execute;
Stream1:=TMemoryStream.Create;
stream1.LoadFromFile(OpenDialog1.FileName); şeklinde değiştirdim.
Kaydetme işleminide:
Jpeg1.SaveToStream(Stream1);
SaveDialog1.Execute;
jpeg1.SaveToFile(SaveDialog1.FileName); diye değiştirince olay çözüldü hocam....
Diğer arkadaşlara örnek teşkiletmesi açısından tam kodu aşağıya ekliyorum.
Kod: Tümünü seç
unit Unit8;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs,Jpeg, ClipBrd, JclGraphics, StdCtrls, ExtCtrls;
type
TForm8 = class(TForm)
Image1: TImage;
Button1: TButton;
Button2: TButton;
Button3: TButton;
OpenDialog1: TOpenDialog;
SaveDialog1: TSaveDialog;
procedure Button2Click(Sender: TObject);
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form8: TForm8;
Jpeg1: TJpegImage;
Stream1: TMemoryStream;
Oran, OranW, OranH : Real;
CompressedImage: TImage;
implementation
{$R *.dfm}
procedure TForm8.Button1Click(Sender: TObject);
begin
//RESİM DOSYASINI AÇMA İŞLEMİ....
try
OpenDialog1.Execute;
Stream1:=TMemoryStream.Create;
stream1.LoadFromFile(OpenDialog1.FileName);
Jpeg1:=TJpegImage.Create;
Jpeg1.LoadFromStream(Stream1);
Image1.Picture.Bitmap.Assign(Jpeg1);
finally
Jpeg1.Free;
Stream1.Free;
end;
end;
procedure TForm8.Button2Click(Sender: TObject);
begin
//GÖRÜNTÜLEME VE KAYDETME İŞLEMİ. isteyen bu ikisini ayrı ayrı butonlara koyabilir....
if Image1.Picture.Graphic<>nil then
begin
if (Image1.Picture.Graphic.Width >100) or (Image1.Picture.Graphic.Height>130) then
begin
//ShowMessage('Genişlik: '+IntToStr(Image1.Picture.Graphic.Width)+'Yükseklik: '+IntToStr(Image1.Picture.Graphic.Height));
CompressedImage:=TImage.Create(Self);
OranW:=100/Image1.Picture.Graphic.Width;
OranH:=130/Image1.Picture.Graphic.Height;
if OranW>OranH then Oran:=OranH else Oran:=OranW;
Stretch(Round(Image1.Picture.Graphic.Width*Oran),
Round(Image1.Picture.Graphic.Height*Oran),
rfBell, 1, Image1.Picture.Graphic,
CompressedImage.Picture.Bitmap);
Image1.Picture.Bitmap.Assign(CompressedImage.Picture.Bitmap);
CompressedImage.Free;
//ShowMessage('Küçültüldü Genişlik:'+IntToStr(Image1.Picture.Bitmap.Width)+' Yükseklik:'+IntToStr(Image1.Picture.Bitmap.Height));
end;
end;
// JPEG FORMATINA ÇEVİR
try
Stream1:=TMemoryStream.Create;
Jpeg1:=TJpegImage.Create;
if Image1.Picture.Graphic<>nil then
begin
if not Image1.Picture.Graphic.Empty then
begin
if Image1.Picture.Graphic is TJpegImage then
begin
Image1.Picture.Graphic.SaveToStream(Stream1);
// ShowMessage('O bir jpeg. size='+IntToStr(Stream1.Size));
end else begin
Jpeg1.Assign(Image1.Picture.Graphic);
Jpeg1.Compress;
Jpeg1.SaveToStream(Stream1);
SaveDialog1.Execute;
jpeg1.SaveToFile(SaveDialog1.FileName);
// ShowMessage('O bir jpeg değil. size='+IntToStr(Stream1.Size));
end;
end;
end;
finally
Jpeg1.Free;
Stream1.Free;
end;
end;
end.