1.浏览按钮
winfrom
private void btnCheckImages_Click(object sender, EventArgs e)
{
OpenFileDialog openFileDialogTemp = new OpenFileDialog();
DialogResult dr = openFileDialogTemp.ShowDialog();
if (dr == DialogResult.OK)
{
string image = openFileDialogTemp.FileName;
string picpath = openFileDialogTemp.FileName;
pictureBox1.Image = Image.FromFile(image);
this.txtImagesUrl.Text = image;
}
}
2.上传按钮
/// <summary>
/// 上传图片
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void btnUpImages_Click(object sender, EventArgs e)
{
//判断图片的大小 ;
int height = pictureBox1.Image.Height;
int width = pictureBox1.Image.Width;
if (height < 40 && width < 40)
{
//将图片转为base64上传到服务器
string image = ImageUtils.ImgToBase64String((Bitmap)pictureBox1.Image);
Dictionary<string, string> dict = new Dictionary<string, string>();
dict.Add("image", image);
//将图片转为base64编码上传到服务器,再在服务器解码
string ret = HttpMethods.DoPost(ConstUtils.clientUrl + "WMS/Stock/UploadImage", dict, ConstUtils.httpTimeout);
if (ret == null)
{
MessageBox.Show("网络异常");
return;
}
}
else
{
//先将图片压缩
Bitmap bitmap = ImageUtils.GetThumbnail((Bitmap)pictureBox1.Image, 40, 40);
//再将图片转为base64上传到服务器
//将图片转为base64上传到服务器
string image = ImageUtils.ImgToBase64String(bitmap);
Dictionary<string, string> dict = new Dictionary<string, string>();
dict.Add("image", image);
string ret = HttpMethods.DoPost(ConstUtils.clientUrl + "WMS/Stock/UploadImage", dict, ConstUtils.httpTimeout);
if (ret == null)
{
MessageBox.Show("网络异常");
return;
}
}
}
2.服务器
public string UploadImage(string image)
{
//将base64的字符串转回图片
Bitmap bitmap = Utility.ImageUtils.Base64StringToImage(image);
string virtualPath = Path.Combine("/Uploads/Avatar/", Guid.NewGuid().ToString().Replace("-", "").ToUpper() + ".png");
string filePath = Request.MapPath(virtualPath);
if (FileUtil.Exists(filePath))
{
FileUtil.Delete(filePath);
}
bitmap.Save(filePath, ImageFormat.Png);
return virtualPath;
}
ImageUtils类
public class ImageUtils
{
/// <summary>
/// 压缩图片
/// </summary>
/// <param name="b">图片</param>
/// <param name="destHeight"></param>
/// <param name="destWidth"></param>
/// <returns></returns>
public static Bitmap GetThumbnail(Bitmap b, int destHeight, int destWidth)
{
Image imgSource = b;
ImageFormat thisFormat = imgSource.RawFormat;
int sW = 0, sH = 0;
// 按比例缩放
int sWidth = imgSource.Width;
int sHeight = imgSource.Height;
sW = sWidth;
sH = sHeight;
Bitmap outBmp = new Bitmap(destWidth, destHeight);
Graphics g = Graphics.FromImage(outBmp);
g.Clear(Color.Transparent);
// 设置画布的描绘质量
g.CompositingQuality = CompositingQuality.HighQuality;
g.SmoothingMode = SmoothingMode.HighQuality;
g.InterpolationMode = InterpolationMode.HighQualityBicubic;
//g.DrawImage(imgSource, new Rectangle((destWidth - sW) / 2, (destHeight - sH) / 2, sW, sH), 0, 0, imgSource.Width, imgSource.Height, GraphicsUnit.Pixel);
g.DrawImage(imgSource, new Rectangle(0, 0, destWidth, destHeight), new Rectangle(0, 0, imgSource.Width, imgSource.Height), GraphicsUnit.Pixel);
g.Dispose();
// 以下代码为保存图片时,设置压缩质量
EncoderParameters encoderParams = new EncoderParameters();
long[] quality = new long[1];
quality[0] = 100;
EncoderParameter encoderParam = new EncoderParameter(System.Drawing.Imaging.Encoder.Quality, quality);
encoderParams.Param[0] = encoderParam;
imgSource.Dispose();
return outBmp;
}
public static string SaveThumb(string fileName, int destWidth, int destHeight, string savePath, string virtualPath)
{
Bitmap bitmap = new Bitmap(fileName);
Bitmap outBitmap = GetThumbnail(bitmap, destHeight, destWidth);
string outputName = Guid.NewGuid().ToString().Replace("-", "");
string outputFilePath = savePath + virtualPath + outputName + ".png";
outBitmap.Save(outputFilePath, ImageFormat.Png);
return virtualPath + outputName + ".png";
}
//图片转为base64编码的字符串
public static string ImgToBase64String(Bitmap bitmap)
{
try
{
MemoryStream ms = new MemoryStream();
bitmap.Save(ms, ImageFormat.Png);
byte[] arr = new byte[ms.Length];
ms.Position = 0;
ms.Read(arr, 0, arr.Length);
ms.Close();
return Convert.ToBase64String(arr);
}
catch (Exception ex)
{
return null;
}
}
//图片转为base64编码的字符串
public static string ImgToBase64String(string Imagefilename)
{
try
{
Bitmap bmp = new Bitmap(Imagefilename);
MemoryStream ms = new MemoryStream();
bmp.Save(ms, System.Drawing.Imaging.ImageFormat.Jpeg);
byte[] arr = new byte[ms.Length];
ms.Position = 0;
ms.Read(arr, 0, (int)ms.Length);
ms.Close();
return Convert.ToBase64String(arr);
}
catch (Exception ex)
{
return null;
}
}
//threeebase64编码的字符串转为图片
public static Bitmap Base64StringToImage(string strbase64)
{
try
{
byte[] arr = Convert.FromBase64String(strbase64);
MemoryStream ms = new MemoryStream(arr);
Bitmap bmp = new Bitmap(ms);
bmp.Save(@"d:\test.png", System.Drawing.Imaging.ImageFormat.Png);
ms.Close();
return bmp;
}
catch (Exception ex)
{
return null;
}
}
/// <summary>
/// 将图片路径转换未图片
/// </summary>
/// <param name="url"></param>
/// <returns></returns>
public static Bitmap GetBitmap(string url)
{
HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create(url);
myRequest.Method = "GET";
HttpWebResponse myResponse = null;
try
{
myResponse = (HttpWebResponse)myRequest.GetResponse();
StreamReader reader = new StreamReader(myResponse.GetResponseStream(), Encoding.UTF8);
Stream stream = myResponse.GetResponseStream();
MemoryStream ms = null;
Byte[] buffer = new Byte[myResponse.ContentLength];
int offset = 0, actuallyRead = 0;
do
{
actuallyRead = stream.Read(buffer, offset, buffer.Length - offset);
offset += actuallyRead;
}
while (actuallyRead > 0);
ms = new MemoryStream(buffer);
Image image = Image.FromStream(ms);
myResponse.Close();
stream.Close();
ms.Close();
return new Bitmap(image);
}
//异常请求
catch (WebException ex)
{
return null;
}
//return base64str;
}
}