5

数日前、私はこの質問をして答えを得ました: 額縁を追加して画像にテキストを挿入する方法は?

ここで、TPanel(1x形状、1x TImage、2x TLabel)のコンテンツをJPGファイルとして保存すると
、そのJPGファイルのサイズがTImageの画像のサイズである20kbから620kbに増加します。

寸法はほぼ同じです。元のJPGファイル320x320、新しいJPG画像361x440。

では、そのサイズを小さくするにはどうすればよいですか?

これは、@ iPathからの最初の質問に対する回答です。これにより、新しいJPGファイルが作成されます。

procedure TForm1.SavePanelAsImage;
var
 img: TBitmap;
begin
 img := TBitmap.Create;
 try
  img.Width := fpPanel.Width;
  img.Height := fpPanel.Height;
  fpPanel.PaintTo(img.Canvas, 0, 0);
  img.SaveToFile(fpFileName);
 finally
  img.Free;
end;
end;
4

4 に答える 4

16

保存したのはJPEG画像ではありません。Windowsビットマップを保存しました。圧縮はまったくありません。たまたま.jpg拡張子が付いていますが、ファイル自体がJPEGになるわけではありません。

TJPEGImageファイルを保存するためにを使用する必要があります。プロパティを使用して圧縮を制御しCompressionQualityます。画像をビットマップに入れたら、それをJPEGに転送します

uses
  jpeg;

procedure TForm1.SavePanelAsImage;
var
  img: TBitmap;
  JpegImage: TJPEGImage;
begin
  img := TBitmap.Create;
  try
    img.Width := fpPanel.Width;
    img.Height := fpPanel.Height;
    fpPanel.PaintTo(img.Canvas, 0, 0);
    JpegImage := TJPEGImage.Create;
    try
      JpegImage.CompressionQuality := ...;//you decide the value
      JpegImage.Assign(img);
      JpegImage.SaveToFile(fpFileName);
    finally
      JpegImage.Free;
    end;
  finally
    img.Free;
  end;
end;
于 2012-11-06T20:57:04.463 に答える
4

ファイルはJPEGではなくビットマップとして保存されています。

「非常に高品質」であっても、JPEGはそのサイズにはなりません。

ただし、32ビットビットマップ(RLEなし)--361 * 440 * 4(バイト/ピクセル)〜640kになります

于 2012-11-06T20:57:30.370 に答える
4
implementation
uses Jpeg;


procedure SaveBMPasJPG(bmp:TBitmap; const FileName:String;Quality:Integer=90);
var
  jpg:TJpegImage;
begin
   jpg:=TJpegImage.Create;
   try
     jpg.CompressionQuality := Quality;
     jpg.Assign(bmp);
     jpg.SaveToFile(FileName);
   finally
     jpg.Free;
   end;

end;
于 2012-11-06T21:00:38.467 に答える
-2

カーネルバルクイメージリサイザーツールを試して、一度に1つまたは複数のイメージのサイズを変更してください。

于 2012-12-20T07:39:56.213 に答える