2012-11-06 5 views
3

며칠 전 나는이 질문을하고 답변을 가지고 : 나는 JPG 파일로 TPanel과 (1 배 모양, 1 배 TImage의 2 배 TLabel)의 내용을 저장할 때, 이제 How to add a picture frame and insert the text in the image?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; 
+0

비트 맵 파일이 생성되고 있습니다! 내 대답의 노트 섹션에서 당신은 TJPEGImage를 사용하여 비트 맵을 Jpeg로 변환해야한다고 언급했습니다. 내 예는 @ David-Heffernan이 명시한대로 비트 맵을 저장합니다.) –

+5

BTW에주의하십시오. JPEG는 손실 압축 알고리즘입니다. 즉, 이미지를 저장하고 다시로드하면 똑같은 이미지를 다시 얻지 못합니다. 따라서 JPEG로 저장할 때마다 여러 번 편집하면 이미지에 여러 세대의 손실이 발생합니다. –

답변

13

은 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; 
4
파일은 비트 맵으로 저장되는

및 JPEG 등의 하지로 전송할 수 있습니다.

"매우 좋은 품질"일지라도 JPEG는 그 크기가되지 않습니다. 그러나

, 이 될 것입니다 (RLE 없음) 32 비트 비트 맵-361 * 440 * 4 (바이트/픽셀) ~ 640 K

3
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; 
-2

이미지가 하나의 크기를 조정할 커널 대량 이미지 크기 변경 도구를 사용해보십시오 또는 한 번에 여러 번.

관련 문제