Resim Sıkıştırma

Delphi'de kod yazma ile ilgili sorularınızı bu foruma yazabilirsiniz.
delphici
Üye
Mesajlar: 41
Kayıt: 07 May 2004 10:55

Resim Sıkıştırma

Mesaj gönderen delphici »

Herkeze selam!

Delphide veritabanına kayıt şlemi yapıyorum ve veri tabanına resimde kaydedeceğim bunun için bazı büyük resimlerin boyutlarını küçültüpde kaydetmek istiyorum bunun için yardımlarınızı bekliyorum.

İyi çalışmalar.
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7588
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

Merhaba,

resimlerin boyutunu mu küçültmek istiyorsun yoksa büyüklüğünü mü? Mesela 300x300 bir resmi 40x40 gibi çözünürlüğünü mü, yoksa 300 KB'lık bir resmi 40 KB düşürmek mi?

Eğer KB cinsinden düşürmek istiyorsan resmi jpeg'e dönüştürüp kaydedebilirsin. Gerekli kodlar ipuçlarında var.

Kolay gelsin.
delphici
Üye
Mesajlar: 41
Kayıt: 07 May 2004 10:55

Resim Sıkıştırma

Mesaj gönderen delphici »

Kb cinsinde sıkıştıracam yanlız örneğin 20mb bir jpg dosyasını nasıl küçültecem.

İyi Çalışmalar.
Kullanıcı avatarı
TRSoft
Kıdemli Üye
Mesajlar: 636
Kayıt: 13 Şub 2004 11:39
Konum: Konya
İletişim:

Mesaj gönderen TRSoft »

Hocam :shock: 20 mb bir jpeg dosyası olduğundan eminmisiniz.. veya şöyle sorayım bu 20 mb lık dosyayı database kayıt etmek istediğinizden eminmisiniz..

Zaten dosya büyüklüğünde bmp formatına göre bayağı bir azalma sağlamak için jpeg formatına çeviri yapıyoruz..

Hocam bir yanlışınız olmasın.. bende 3333 x 2500 boyutlarında bir jpeg resmi var büyüklüğü sadece 746 kb..

Tavsiyem eğer jpeg dosyanız gerçekten 20 mb ise önce boyutlarını küçültmeniz..
Ha bunu nasıl yaparız dersen işte onu bilmiyorum..

Ama eminim bilen bir arkadaş çıkacaktır...
İlimle geçen bir gece,
ibadetle geçen bin geceden hayırlıdır.
HZ. MUHAMMED (S.A.)
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7588
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

Merhaba,

bazı büyük resimlerin boyutları o kadar olabiliyor. Eski çalıştığım firmada makina resimleri vardı. 20-30 MB büyüklüğünde olanlar vardı.

Ben de TrSoft'a katılıyorum. Bu resimleri veritabanına saklamak yerine, sadece programın ulaşabileceği bir klasör ayarlayıp (mümkünse) resimleri buraya koyun ve veritabanında sadece dosyanın yerini ve ismini tutun. Böylesi çok daha iyi olacaktır.

Kolay gelsin.
delphici
Üye
Mesajlar: 41
Kayıt: 07 May 2004 10:55

Mesaj gönderen delphici »

Hayır bu dosyaları database'ye kayıt etmeyeceğim ve aynen dediğiniz gibi bir kalsörde toplayacağım ama resimler okadar fazlaki (bu arada her resmin boyutu bukadar çok değil)hdd yetmeyebilir hatta yetmez ve kişi yedekleme yapmak istediğinde iş çok zora girer.
Ben şöyle bir şey düşündüm:
Jpeg formatını gif'e çevirsek ve resim boyutlarındada oynama yapsak boyut oldukca düşer ama bunu yapamadım :cry: .
Nu konuda bişey önerebilirmisiniz?
Kullanıcı avatarı
husonet
Admin
Mesajlar: 2962
Kayıt: 25 Haz 2003 02:14
Konum: İstanbul
İletişim:

Mesaj gönderen husonet »

Resim Boyutlarını küçültmek için Photoshop kullanabilirsin. Image menüsünden Image Size seceneği ile resimlerini istediğin pixelde küçültebilirsin. Ve küçültme işlemi yaptığın zaman tekrar kayıt ettiğinde Jpg formatını seç kayıt esnasında Jpeg Options formu çıkar oradan Small File n karşısında olan scrollbarı 8 getir resminin bayağı küçüldüğünü hissedersin.

Kolay Gelsin...

Gazete manşetleri
* DİKKAT :Lütfen forum kurallarını okuyalım ve uyalım...!
* Warez,crack vs. paylaşımı kesinlikle yasaktır.
Kullanıcı avatarı
mussimsek
Admin
Mesajlar: 7588
Kayıt: 10 Haz 2003 12:26
Konum: İstanbul
İletişim:

Mesaj gönderen mussimsek »

Tabii ki de, .gif 256 renk olduğu için ve boyutlarda küçüleceğinden boyutları çok düşecektir.

Paint Shop Pro'nun Batch işlem özelliği var. Bir kere deneme yaparak bir resim kabul edilebilir boyutlara getirdiğiniz zaman, bir klasördeki tüm dosyaları batch işlem ile aynı tarzda küçültebilirsiniz.

Delphi tarafında bir çözüm soruyorsanız, fikrim yok.

Kolay gelsin.
delphici
Üye
Mesajlar: 41
Kayıt: 07 May 2004 10:55

Mesaj gönderen delphici »

Ben bunu delphide nasıl yaparım demiştim :) . Yani kodlarla, Neyse ben bu konuda araştırma içerisindeyim. İnşallah bulurum. Bulunca burada paylaşırım.
Koolaygelsin.
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

Fi tarihinde kullandığım bir fonksiyon vardı... Şu amaçla kullanıyordum. Secilen herhangi bir boyuttaki bmp, gif ve jpg dosyayı belirlenmiş boyuttaki bir jpg haline donusturuyor...
Fonksiyonunun parametrelerinin anlamı:
VAR_DOSYA_ADI: Bu donusume tabi tutulacak dosyanın tam yolu ve adı...
VAR_GRAPHIC: donusume tabi tutulacak olan dosyayi bir TImage nesnesine yükleyip, Bu parametreye de Image1.Picture.Graphic degerini gonderin... Aslında bu gerekli olmamalı VAR_DOSYA_ADI ile de fonksiyon isi halledebilmeli ama o zamanki kullandıgım yer geregi boyle yazmısız ne yapalım... Su an uzerinde çalışma sansım olmadığı icin aynen yolluyorum...
VAR_GENISLIK:Yeni resmin olmasını istediginiz pixel olarak genislik degeri
VAR_YUKSEKLIK:Yeni resmin olmasını istediginiz pixel olarak yükseklik degeri
fonksiyon sonuç resmin yolunu dönmektedir...

Kod: Tümünü seç

function ConvertedResizedFileName(VAR_DOSYA_ADI:string;VAR_GRAPHIC: TGraphic;VAR_GENISLIK:smallint;VAR_YUKSEKLIK:smallint):string;
var
  JPEG  :  TJPEGImage;
  Bitmap:  TBitmap;
  Gif:TGifImage;
  ARect: TRect;
  VAR_JPEG_ADI,VAR_TEMP_DIZINI:string;
  VAR_KUCULTME_ORANI:Real;
begin
  VAR_JPEG_ADI:=VAR_DOSYA_ADI;
  VAR_TEMP_DIZINI:=TempDirectory;
  ConvertedResizedFileName:=VAR_DOSYA_ADI;
  if (VAR_GRAPHIC is TBitmap) then  //BMP --> JPEG
  begin
    Bitmap := TBitmap.Create;
    try
      Bitmap.LoadFromFile(VAR_DOSYA_ADI);
      JPEG := TJPEGImage.Create;
      try
        JPEG.Assign(Bitmap);
//        JPEG.CompressionQuality := 70;
        JPEG.SaveToFile(VAR_TEMP_DIZINI+'converted.JPG');
        VAR_JPEG_ADI:=VAR_TEMP_DIZINI+'converted.JPG';
        ConvertedResizedFileName:=VAR_JPEG_ADI;
      finally
        JPEG.Free;
      end
    finally
      Bitmap.Free;
    end;
  end;
  if (VAR_GRAPHIC is TGifImage) then
  begin
    Gif := TGifImage.Create;
    try
      Gif.LoadFromFile(VAR_DOSYA_ADI);
      JPEG := TJPEGImage.Create;
      try
        JPEG.Assign(Bitmap);
//        JPEG.CompressionQuality := 70;
        JPEG.SaveToFile(VAR_TEMP_DIZINI+'converted.JPG');
        VAR_JPEG_ADI:=VAR_TEMP_DIZINI+'converted.JPG';
        ConvertedResizedFileName:=VAR_JPEG_ADI;
      finally
        JPEG.Free;
      end
    finally
      Gif.Free;
    end;
  end;

  if (VAR_GRAPHIC.Width>VAR_GENISLIK) or (VAR_GRAPHIC.Height>VAR_YUKSEKLIK) then
  begin
    JPeg := TJPegImage.Create;
    Bitmap := TBitmap.Create;
    try
      if (VAR_GRAPHIC.Width/VAR_GENISLIK)>(VAR_GRAPHIC.Height/VAR_YUKSEKLIK) then
        VAR_KUCULTME_ORANI:=VAR_GRAPHIC.Width/VAR_GENISLIK
      else
        VAR_KUCULTME_ORANI:=VAR_GRAPHIC.Height/VAR_YUKSEKLIK;
      while (Round(VAR_GRAPHIC.Width/VAR_KUCULTME_ORANI)>VAR_GENISLIK) or (Round(VAR_GRAPHIC.Height/VAR_KUCULTME_ORANI)>VAR_YUKSEKLIK) do
        VAR_KUCULTME_ORANI:=VAR_KUCULTME_ORANI*1.001;
      JPeg.LoadFromFile(VAR_JPEG_ADI);
      {set bitmap at half size}
      Bitmap.Width := Round(JPeg.Width/VAR_KUCULTME_ORANI);
      Bitmap.Height := Round(JPeg.Height/VAR_KUCULTME_ORANI);
      ARect := Rect(0, 0, Round(JPeg.Width/VAR_KUCULTME_ORANI), Round(JPeg.Height/VAR_KUCULTME_ORANI));
      {draw at half size}
      Bitmap.Canvas.StretchDraw(ARect, JPeg);
      JPeg.Assign(Bitmap);
      JPEG.CompressionQuality := 70;
      JPeg.SaveToFile(VAR_TEMP_DIZINI+'resized.JPG');
      ConvertedResizedFileName:=VAR_TEMP_DIZINI+'resized.JPG';
    finally
      JPeg.Free;
      Bitmap.Free;
    end;
  end;
end;
uses da GIFImage, jpeg olmasi gerekiyor ...
ayrıca unitin basında implementation in altinda....

Kod: Tümünü seç

type
  TGraphicHeader = record
    Count: Word;                { Fixed at 1 }
    HType: Word;                { Fixed at $0100 }
    Size: Longint;              { Size not including header }
  end;

  TGraphicHack = class(TGraphic);
  TGraphicHackClass = class of TGraphicHack;

  TImageSignature = record
    ImageType: TGraphicClass;
    Name: string;
    Signature: string;
  end;
const
  Signatures: array[0..2] of TImageSignature
    = ((ImageType: TBitmap; Name: 'Bitmap'; Signature: 'BM'),
       (ImageType: TGIFImage; Name: 'GIF'; Signature: 'GIF'),
       (ImageType: TJPEGImage; Name: 'JPEG';
        Signature: chr($FF)+chr($D8)+chr($FF)+chr($E0)+chr($00)+chr($10)+'JFIF'));
Gozume carpan bu fonksiyon icinde kullanılmıs bir baska fonksiyonum

Kod: Tümünü seç

function TempDirectory():string;
var
  VAR_DIRECTORY: Array[0..$FF] of Char;
begin
  GetTempPath(MAX_PATH,VAR_DIRECTORY);
  TempDirectory:=VAR_DIRECTORY;
end;
Benzer bir eksik olursa artık tolere edilebilir herhalde...

Kolay gelsin....
* http://www.fahrettin.org Manzara Fotoğraflarım... :)
* http://delphiturkiye.gunduz.info Seminerler... ;)
* http://www.hakmar.com.tr Kalite bir haktır... 8)
delphici
Üye
Mesajlar: 41
Kayıt: 07 May 2004 10:55

Mesaj gönderen delphici »

Çok sağolun hocam üzerinde çalışmaya başlayacağım hemen.
Kullanıcı avatarı
MicroChip
Kıdemli Üye
Mesajlar: 1119
Kayıt: 02 Ağu 2003 01:02
Konum: İstanbul
İletişim:

Mesaj gönderen MicroChip »

Zaten jpg image dosyaları sıkıştırılmış formattadır. 20-30 mb bayağı büyük, bunu düşürmek için ya arkadaşların dediği gibi çözünürlüğü düşüreceksin veya jpg içinden resim kalitesini düşüreceksin. JPG resim dosyaları ile ilgili bir örnek delphinin içinde de var zaten hatta pathini de yazayım sana:

C:\Program Files\Borland\Delphi5\Help\Examples\Jpeg

Kolay gelsin
Kafkas Kartalı Kabarday
Sitesi!= http://www.ahmetceylan.com
Resim
delphici
Üye
Mesajlar: 41
Kayıt: 07 May 2004 10:55

Mesaj gönderen delphici »

banada zaten bu olayı yapacak delphi kodu lazım.
delphici
Üye
Mesajlar: 41
Kayıt: 07 May 2004 10:55

Mesaj gönderen delphici »

fahrettin hocam çok teşekkür ederim verdiğiniz kod çok işime yaradı. Tekrardan teşekkür. İyi Çalışmalar.
Kullanıcı avatarı
fahrettin
Admin
Mesajlar: 2619
Kayıt: 11 Haz 2003 10:38
Konum: İstanbul
İletişim:

Mesaj gönderen fahrettin »

rica ederim....
işinize yaramasına sevindim.... :)
* http://www.fahrettin.org Manzara Fotoğraflarım... :)
* http://delphiturkiye.gunduz.info Seminerler... ;)
* http://www.hakmar.com.tr Kalite bir haktır... 8)
Cevapla