SQL Server Database (Veritabanına) Image (Blob) alana (field'a) jpeg resim yükleme.

Yazdığınız makaleleri ve üyelerimizin işine yarayacağını düşündüğünüz kodlarınızı gönderebilirsiniz. Bu foruma soru sormayın!
Cevapla
Kullanıcı avatarı
csunguray
Üye
Mesajlar: 855
Kayıt: 09 Ara 2006 05:08
Konum: Adana
İletişim:

SQL Server Database (Veritabanına) Image (Blob) alana (field'a) jpeg resim yükleme.

Mesaj gönderen csunguray »

Aşağıdaki kodlar veritabanına resim yükleme ile ilgili ihtiyacınız olan hemen her şeyi sağlar.

1. Resim eğer BMB formatında ise resmi Jpeg formatına çevirme.
2. Resmi kaliteli bir şekilde büyütüp küçültme (yeniden boyutlandırma, stretch etme). Bu işlem için JCL (Jedi Code Library) kütüphanesindeki JclGraphics unit'i içerisindeki Stretch procedure'ü kullanılmaktadır.
3. TADOBlobStream yoluyla resmi sahaya yükleme.

Kod: Tümünü seç

uses
  Jpeg,
  JclGraphics;

procedure TForm1.GetJpegImageFromBlobField(var Image1: TImage;
  BlobField1: TBlobField);
var
  Stream1: TADOBlobStream;
  Jpeg1: TJpegImage;
begin
  // Resim Aç
  if not BlobField1.IsNull then
  begin
    try
      Stream1 := TADOBlobStream.Create(BlobField1, 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;
end;

procedure TForm1.StoreJpegImageToBlobField(Image1: TImage;
  var BlobField1: TBlobField; StretchType: Byte; NewWidth,
  NewHeight: Word);
const
  // Image Stretch Tipleri
  stAyniKalsin = 0;
  stBuyukseKucult = 1;
  stKucukseBuyult = 2;
  stHerDurumdaStretch = 3;
var
  Stream1: TADOBlobStream;
  Jpeg1: TJpegImage;
  CompressedImage: TImage;
  Oran, OranW, OranH: Real;
begin
  // Resim Kaydet
  if Image1.Picture.Graphic <> nil then
  begin
    if (Image1.Picture.Graphic.Width > NewWidth) or (Image1.Picture.Graphic.Height > NewHeight) then
    begin
      // ShowMessage('Genişlik: '+IntToStr(Image1.Picture.Graphic.Width)+'  Yükseklik: '+IntToStr(Image1.Picture.Graphic.Height));
      CompressedImage := TImage.Create(Self);
      if StretchType = stBuyukseKucult then
      begin
        if (Image1.Picture.Graphic.Width > NewWidth) or
          (Image1.Picture.Graphic.Height > NewHeight) then
        begin
          OranW := NewWidth / Image1.Picture.Graphic.Width;
          OranH := NewHeight / 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);
        end;
      end else
      begin
        if StretchType = stKucukseBuyult then
        begin
          if (Image1.Picture.Graphic.Width < NewWidth) or
            (Image1.Picture.Graphic.Height < NewHeight) then
          begin
            OranW := NewWidth / Image1.Picture.Graphic.Width;
            OranH := NewHeight / 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);
          end;
        end else
        begin
          if StretchType = stHerDurumdaStretch then
          begin
            OranW := NewWidth / Image1.Picture.Graphic.Width;
            OranH := NewHeight / 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);
          end;
        end;
      end;
      CompressedImage.Free;
      // ShowMessage('Küçültüldü Genişlik: ' + IntToStr(Image1.Picture.Bitmap.Width) + '  Yükseklik: ' + IntToStr(Image1.Picture.Bitmap.Height));
    end;
  end;
  try
    Stream1 := TADOBlobStream.Create(BlobField1, 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;
end;
KULLANMA:

Database'e (Veritabanına) yazma.

Kod: Tümünü seç

var
  BlobField1: TBlobField;
begin
  BlobField1 := ADOQuery1.FieldByName('RESIM1') as TBlobField;
  Form1.StoreJpegImageToBlobField(TImage1, BlobField1, stBuyukseKucult, 500, 500);
end;
Database'den (Veritabanından) okuma.

Kod: Tümünü seç

  Form1.GetJpegImageFromBlobField(TImage1, ADOQuery1.FieldByName('RESIM1') as TBlobField);

Anahtar kelimeler:
Veritabanına resim ekleme
Jpg ve png resimleri veritabanına kaydetme
Delphiden sql veritabanına resim eklemek
Resim ekleme ve okuma
Dbimage jpg resim kaydetme
Delphi timage kullanarak veritabanına jpeg resim kaydetmek
Delphide bmp resim ekleme - pcnet
Veritabanından resim (image) import / export etmek
Delphi ile sql le resim ekleme access sql server oracle
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/)
Cevapla