用于小文件转base64,请无用于大文件,不多说贴源码
public static class ImageToBase64StringTools
{
/// <summary>
/// 获取文件字节数组 请勿用于大文件
/// </summary>
/// <param name="filePath">文件路径</param>
/// <returns>文件字节数组</returns>
public static byte[] GetBtyes(this string filePath)
{
try
{
byte[] bytes = null;
using (FileStream fileStream = new FileStream(filePath, FileMode.Open, FileAccess.Read))
{
bytes = new byte[fileStream.Length];
fileStream.Read(bytes, 0, bytes.Length);
}
return bytes;
}
catch (Exception exc)
{
throw exc;
}
}
/// <summary>
/// 将图片处理对象转图片字节数组
/// </summary>
/// <param name="bitmapImage">图片处理对象</param>
/// <returns>图片字节数组</returns>
public static byte[] GetBytes(this BitmapImage bitmapImage)
{
byte[] byteArray = null;
try
{
Stream stream = bitmapImage.StreamSource;
if (stream != null && stream.Length > 0)
{
//很重要,因为Position经常位于Stream的末尾,导致下面读取到的长度为0。
stream.Position = 0;
using (BinaryReader binaryReader = new BinaryReader(stream))
{
byteArray = binaryReader.ReadBytes((int)stream.Length);
}
}
return byteArray;
}
catch (Exception exc)
{
throw exc;
}
}
/// <summary>
/// 将Base64String转byte数组
/// </summary>
/// <param name="base64">base64String</param>
/// <returns>byte数组</returns>
public static byte[] GetBytesByBase64String(this string base64)
{
var result = Convert.FromBase64String(base64);
return result;
}
/// <summary>
/// 传入图片所在的绝对路径获取图片处理对象 请勿用于大文件
/// </summary>
/// <param name="filePath">图片所在的绝对路径</param>
/// <returns>图片处理对象</returns>
public static BitmapImage GetBitmapImage(this string filePath)
{
var bytes = filePath.GetBtyes();
var result = bytes.GetBitmapImage();
return result;
}
/// <summary>
/// 图片字节数组转图片处理对象
/// </summary>
/// <param name="byteArray">图片字节数组</param>
/// <returns>图片处理对象</returns>
public static BitmapImage GetBitmapImage(this byte[] byteArray)
{
BitmapImage bmp = null;
try
{
bmp = new BitmapImage();
bmp.BeginInit();
bmp.StreamSource = new MemoryStream(byteArray);
bmp.EndInit();
return bmp;
}
catch (Exception exc)
{
throw exc;
}
}
/// <summary>
/// 将Base64String转图片处理对象
/// </summary>
/// <param name="base64">base64String</param>
/// <returns>图片处理对象</returns>
public static BitmapImage GetBitmapImageByBase64String(this string base64)
{
var bytes = base64.GetBytesByBase64String();
var bitmapImage = bytes.GetBitmapImage();
return bitmapImage;
}
/// <summary>
/// 传入uriString获取图片处理对象
/// </summary>
/// <param name="uriString">uri字符串</param>
/// <returns>图片处理对象</returns>
public static BitmapImage GetBitmapImageByUrl(this string uriString)
{
try
{
BitmapImage bit = new BitmapImage();
bit.BeginInit();
bit.UriSource = new Uri(uriString, UriKind.RelativeOrAbsolute);
bit.EndInit();
return bit;
}
catch (Exception exc)
{
throw exc;
}
}
/// <summary>
/// 将图片字节数组转base64string
/// </summary>
/// <param name="imageBytes">图片字节数组</param>
/// <returns>base64string</returns>
public static string GetBase64String(this byte[] imageBytes)
{
var result = Convert.ToBase64String(imageBytes);
return result;
}
/// <summary>
/// 传入图片所在的绝对路径将图片转为base64string 请勿用于大文件
/// </summary>
/// <param name="filePath">图片所在的绝对路径</param>
/// <returns>base64string</returns>
public static string GetBase64String(this string filePath)
{
var bytes = filePath.GetBtyes();
var result = bytes.GetBase64String();
return result;
}
/// <summary>
/// 将图片处理对象转为base64string
/// </summary>
/// <param name="bitmapImage">图片处理对象</param>
/// <returns>base64string</returns>
public static string GetBase64String(this BitmapImage bitmapImage)
{
var bytes = bitmapImage.GetBytes();
var result = bytes.GetBase64String();
return result;
}
/// <summary>
/// 设置目标图片的缩略图
/// </summary>
/// <param name="targetFile">目标图片路径</param>
/// <param name="outPath">缩略图路径</param>
/// <param name="flag">设置压缩的比例1-100</param>
/// <returns>是否处理完成</returns>
public static bool GetPicThumbnail(this string targetFile, string outPath, int flag)
{
System.Drawing.Image iSource = System.Drawing.Image.FromFile(targetFile);
System.Drawing.Imaging.ImageFormat tFormat = iSource.RawFormat;
//以下代码为保存图片时,设置压缩质量
System.Drawing.Imaging.EncoderParameters ep = new System.Drawing.Imaging.EncoderParameters();
long[] qy = new long[1];
qy[0] = flag;//设置压缩的比例1-100
System.Drawing.Imaging.EncoderParameter eParam = new System.Drawing.Imaging.EncoderParameter(System.Drawing.Imaging.Encoder.Quality, qy);
ep.Param[0] = eParam;
try
{
System.Drawing.Imaging.ImageCodecInfo[] arrayICI = System.Drawing.Imaging.ImageCodecInfo.GetImageEncoders();
System.Drawing.Imaging.ImageCodecInfo jpegICIinfo = null;
for (int x = 0; x < arrayICI.Length; x++)
{
if (arrayICI[x].FormatDescription.Equals("JPEG"))
{
jpegICIinfo = arrayICI[x];
break;
}
}
if (jpegICIinfo != null)
{
iSource.Save(outPath, jpegICIinfo, ep);
}
else
{
iSource.Save(outPath, tFormat);
}
return true;
}
catch
{
return false;
}
finally
{
iSource.Dispose();
iSource.Dispose();
}
}
/// <summary>
/// 将指定ui元素保存为图片
/// </summary>
/// <param name="ui">要保存为图片的ui元素</param>
/// <param name="filename">保存路径</param>
public static void SaveFrameworkElementToImage(FrameworkElement ui, string filename)
{
using (FileStream ms = new FileStream(filename, FileMode.Create))
{
RenderTargetBitmap bmp = new RenderTargetBitmap((int)ui.ActualWidth, (int)ui.ActualHeight, 96d, 96d, PixelFormats.Pbgra32);
bmp.Render(ui);
BitmapEncoder encoder = new PngBitmapEncoder();
encoder.Frames.Add(BitmapFrame.Create(bmp));
encoder.Save(ms);
}
}
}