圖片比例縮放 不丟真的C#程式碼----努力加汗水哦
公司做了個圖片網站,但是我用了XInfo.Common.Tools.MyImage元件卻發現圖片縮放後嚴重的丟真
[@more@]
徐哥也很不滿意,強烈要求我必須解決這個問題 所以我就在網站查了很多東東,不過好象都不好用
最後我找到了一個不丟真的縮放程式碼,但不是按照比例縮放的,我又找了個一個比例縮放的程式碼
兩者結合一下,從新改了函式,居然成功了,哈哈 我突然發現我太天才了
我把程式碼發上來吧 以便網友們使用 嘿嘿
//使用方法呼叫GenerateHighThumbnail()方法即可
//引數oldImagePath表示要被縮放的圖片路徑
//引數newImagePath表示縮放後儲存的圖片路徑
//引數width和height分別是縮放範圍寬和高
public static void GenerateHighThumbnail(string oldImagePath, string newImagePath, int width, int height)
{
System.Drawing.Image oldImage = System.Drawing.Image.FromFile(oldImagePath);
int newWidth = AdjustSize(width, height, oldImage.Width, oldImage.Height).Width;
int newHeight =AdjustSize(width, height, oldImage.Width, oldImage.Height).Height;
{
System.Drawing.Image oldImage = System.Drawing.Image.FromFile(oldImagePath);
int newWidth = AdjustSize(width, height, oldImage.Width, oldImage.Height).Width;
int newHeight =AdjustSize(width, height, oldImage.Width, oldImage.Height).Height;
//。。。。。。。。。。。
System.Drawing.Image thumbnailImage = oldImage.GetThumbnailImage(newWidth, newHeight,new System.Drawing.Image.GetThumbnailImageAbort(ThumbnailCallback), IntPtr.Zero);
System.Drawing.Bitmap bm = new System.Drawing.Bitmap(thumbnailImage);
System.Drawing.Bitmap bm = new System.Drawing.Bitmap(thumbnailImage);
//處理JPG質量的函式
System.Drawing.Imaging.ImageCodecInfo ici = GetEncoderInfo("image/jpeg");
if (ici != null)
{
System.Drawing.Imaging.EncoderParameters ep = new System.Drawing.Imaging.EncoderParameters(1);
ep.Param[0] = new System.Drawing.Imaging.EncoderParameter(System.Drawing.Imaging.Encoder.Quality, (long)100);
bm.Save(newImagePath, ici, ep);
System.Drawing.Imaging.ImageCodecInfo ici = GetEncoderInfo("image/jpeg");
if (ici != null)
{
System.Drawing.Imaging.EncoderParameters ep = new System.Drawing.Imaging.EncoderParameters(1);
ep.Param[0] = new System.Drawing.Imaging.EncoderParameter(System.Drawing.Imaging.Encoder.Quality, (long)100);
bm.Save(newImagePath, ici, ep);
//釋放所有資源,不釋放,可能會出錯誤。
ep.Dispose();
ep = null;
}
ici = null;
ep.Dispose();
ep = null;
}
ici = null;
bm.Dispose();
bm = null;
bm = null;
thumbnailImage.Dispose();
thumbnailImage = null;
oldImage.Dispose();
oldImage = null;
}
thumbnailImage = null;
oldImage.Dispose();
oldImage = null;
}
private static bool ThumbnailCallback()
{
return false;
}
private static ImageCodecInfo GetEncoderInfo(String mimeType)
{
int j;
ImageCodecInfo[] encoders;
encoders = ImageCodecInfo.GetImageEncoders();
for (j = 0; j < encoders.Length; ++j)
{
if (encoders[j].MimeType == mimeType)
return encoders[j];
}
return null;
}
public struct PicSize
{
public int Width;
public int Height;
}
public static PicSize AdjustSize(int spcWidth, int spcHeight, int orgWidth, int orgHeight)
{
PicSize size = new PicSize();
// 原始寬高在指定寬高範圍內,不作任何處理
if (orgWidth <= spcWidth && orgHeight <= spcHeight)
{
size.Width = orgWidth;
size.Height = orgHeight;
}
else
{
// 取得比例係數
float w = orgWidth / (float)spcWidth;
float h = orgHeight / (float)spcHeight;
// 寬度比大於高度比
if (w > h)
{
size.Width = spcWidth;
size.Height = (int)(w >= 1 ? Math.Round(orgHeight / w) : Math.Round(orgHeight * w));
}
// 寬度比小於高度比
else if (w < h)
{
size.Height = spcHeight;
size.Width = (int)(h >= 1 ? Math.Round(orgWidth / h) : Math.Round(orgWidth * h));
}
// 寬度比等於高度比
else
{
size.Width = spcWidth;
size.Height = spcHeight;
}
}
return size;
}
{
return false;
}
private static ImageCodecInfo GetEncoderInfo(String mimeType)
{
int j;
ImageCodecInfo[] encoders;
encoders = ImageCodecInfo.GetImageEncoders();
for (j = 0; j < encoders.Length; ++j)
{
if (encoders[j].MimeType == mimeType)
return encoders[j];
}
return null;
}
public struct PicSize
{
public int Width;
public int Height;
}
public static PicSize AdjustSize(int spcWidth, int spcHeight, int orgWidth, int orgHeight)
{
PicSize size = new PicSize();
// 原始寬高在指定寬高範圍內,不作任何處理
if (orgWidth <= spcWidth && orgHeight <= spcHeight)
{
size.Width = orgWidth;
size.Height = orgHeight;
}
else
{
// 取得比例係數
float w = orgWidth / (float)spcWidth;
float h = orgHeight / (float)spcHeight;
// 寬度比大於高度比
if (w > h)
{
size.Width = spcWidth;
size.Height = (int)(w >= 1 ? Math.Round(orgHeight / w) : Math.Round(orgHeight * w));
}
// 寬度比小於高度比
else if (w < h)
{
size.Height = spcHeight;
size.Width = (int)(h >= 1 ? Math.Round(orgWidth / h) : Math.Round(orgWidth * h));
}
// 寬度比等於高度比
else
{
size.Width = spcWidth;
size.Height = spcHeight;
}
}
return size;
}
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/631872/viewspace-1049782/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 圖片等比例縮放程式碼
- js控制圖片等比例縮放程式碼JS
- 按比例縮放圖片大小程式碼例項
- 根據比例縮放圖片的尺寸不變形程式碼例項
- html 圖片按比例縮放HTML
- 等比例縮放圖片 jsJS
- 圖片縮放(不裁剪,按原來比例計算寬高)
- 圖片等比例縮放裁切詳解
- JavaScript圖片簡單等比例縮放JavaScript
- JS實現等比例縮放圖片JS
- css實現圖片按寬等比例縮放不變形CSS
- 利用javascript實現圖片等比例縮放JavaScript
- JS控制圖片顯示的大小(圖片等比例縮放)JS
- css設定圖片固定寬高,按比例縮放CSS
- 移動端圖片等比例縮放實踐
- Vue3等比例縮放圖片元件Vue元件
- js圖片等比例放大縮小例項程式碼JS
- canvas實現的圖片縮放程式碼例項Canvas
- ASP.NET C# 按原圖片大小等比例縮放生成縮圖ASP.NETC#
- css3背景圖片等比例縮放鋪滿全屏CSSS3
- Android根據螢幕寬度,按比例縮放圖片Android
- CSS實現圖片等比例縮小不變形CSS
- Android 圖片縮放Android
- 實現圖片縮放
- 如何設定圖片高度固定,寬度可以根據比例縮放
- 純JS實現圖片預覽與等比例縮放和居中JS
- SwiftUI圖片處理(縮放、拼圖)SwiftUI
- 圖片操作系列 —(1)手勢縮放圖片功能
- HTML5 圖片縮放功能HTML
- Android:ImageView圖片縮放、居中AndroidView
- C#獲取Windows10螢幕的縮放比例C#Windows
- html中背景圖按比例縮放全屏顯示HTML
- 如何讓圖片按比例響應式縮放、並自動裁剪的css技巧CSS
- android imageview 縮放檢視圖片AndroidView
- opencv 圖片幾何變換-縮放OpenCV
- Android 載入大圖片,不壓縮圖片Android
- AlamofireImage 使用 – swift載入網路圖片,縮放圖片,生成圓形圖片Swift
- 【轉載】如何讓圖片按比例響應式縮放、並自動裁剪的css技巧CSS