我的應用使用WinAPI中的方法制作截圖。屏幕是好的,它保存爲gif並具有76 kB。 JPG,PNG和其他格式有更多的大小。我必須通過網絡發送這個文件,它需要幾秒鐘,大約2-3秒。在.NET或任何免費的外部軟件中壓縮此文件是否可行?質量不好,因爲我只需要閱讀幾個標籤。如何將截圖通過網絡進行壓縮發送?
感謝
我的應用使用WinAPI中的方法制作截圖。屏幕是好的,它保存爲gif並具有76 kB。 JPG,PNG和其他格式有更多的大小。我必須通過網絡發送這個文件,它需要幾秒鐘,大約2-3秒。在.NET或任何免費的外部軟件中壓縮此文件是否可行?質量不好,因爲我只需要閱讀幾個標籤。如何將截圖通過網絡進行壓縮發送?
感謝
你可以看看在C#中調整圖像的大小。這很容易做...以下是我過去使用過的一些代碼:
Image image = Image.FromFile(fi.FullName);
image = resizeImage(image, new Size(120, 120));
EncoderParameter qualityParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, (long)85);
ImageCodecInfo jpegCodec = GetEncoderInfo("image/jpeg");
EncoderParameters encoderParams = new EncoderParameters(1);
encoderParams.Param[0] = qualityParam;
image.Save(OutSourceLoc + "/" + fi.Name, jpegCodec, encoderParams);
static Image resizeImage(Image imgToResize, Size size)
{
int sourceWidth = imgToResize.Width;
int sourceHeight = imgToResize.Height;
float nPercent = 0;
float nPercentW = 0;
float nPercentH = 0;
nPercentW = ((float)size.Width/(float)sourceWidth);
nPercentH = ((float)size.Height/(float)sourceHeight);
if (nPercentH < nPercentW)
nPercent = nPercentH;
else
nPercent = nPercentW;
int destWidth = (int)(sourceWidth * nPercent);
int destHeight = (int)(sourceHeight * nPercent);
Bitmap b = new Bitmap(destWidth, destHeight, System.Drawing.Imaging.PixelFormat.Format24bppRgb);
b.SetResolution(300, 300);
Graphics g = Graphics.FromImage((Image)b);
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
g.CompositingQuality = CompositingQuality.HighSpeed;
g.SmoothingMode = SmoothingMode.HighSpeed;
g.DrawImage(imgToResize, 0, 0, destWidth, destHeight);
g.Dispose();
return (Image)b;
}
private static ImageCodecInfo GetEncoderInfo(string mimeType)
{
// Get image codecs for all image formats
ImageCodecInfo[] codecs = ImageCodecInfo.GetImageEncoders();
// Find the correct image codec
for (int i = 0; i < codecs.Length; i++)
if (codecs[i].MimeType == mimeType)
return codecs[i];
return null;
}
除非你試圖整合多個圖像轉移到一個文件中(它們組合成一個zip文件,例如)我沒有看到壓縮圖像的點。
JPG,GIF或PNG已經幾乎儘可能地壓縮了。例如,使用GZIP壓縮現有文件會浪費計算資源而不會帶來好處。
JPG,GIF,PNG已經採用壓縮,就像mp3一樣。
維基百科:
可移植網絡圖形(PNG /pɪŋ/ [2])是採用無損數據壓縮
JPEG位圖圖像格式(/dʒeɪpɛɡ/ [發音爲松鴉 - 佩格]是一種常用的方法有損壓縮數碼攝影(圖片)
GIF圖像壓縮使用Lempel-Ziv-Welch(LZW)無損數據壓縮技術來減少文件大小不降低視覺質量
如果你需要的是文字,也許你可以減少色彩,例如4色灰色圖像?
這可能會使(推測)文本識別更困難,也許。 – 2012-03-05 22:01:18
如果您希望png/gif壓縮在之後很好地工作,那麼減少顏色深度應該沒有抖動。 – CodesInChaos 2012-03-05 22:01:35
想要在保存圖像之前縮放圖像(降低分辨率)嗎?你可以用純C#來做到這一點。 – egrunin 2012-03-05 21:59:43
2-3秒發送76kb似乎有點慢...您使用什麼代碼? – 2012-03-05 22:01:58
VNC是一個相當輕的協議,包含許多像樣的圖像傳輸優化。即使你沒有整體使用它,你也可能會學到一些東西來解決這個問題。 – 2012-03-05 22:07:54