1.解码
码源:
data:image/gif;base64,R0lGODlhWQAnAPcAAAAAAAICAgUFBQYGBgcHBwgICAkJCQoKCgsLCw0NDQ4ODhAQEBISEhMTExYWFhkZGRoaGhwcHB8fHyEhISQkJCUlJScnJyoqKisrKywsLDIyMjMzMzQ0NDU1NTg4ODw8PD4+PkBAQEFBQUJCQkNDQ0ZGRkdHR0hISElJSUpKSktLS0xMTE1NTU5OTk9PT1BQUFRUVFVVVVZWVldXV1hYWFpaWlxcXF1dXV5eXmBgYGFhYWRkZGVlZWZmZmdnZ2hoaGtra2xsbG1tbW5ubm9vb3BwcHR0dHZ2dnd3d3t7e35+fn9/f4CAgIKCgoSEhIWFhYaGhoiIiIqKio2NjY6Ojo+Pj5CQkJGRkZWVlZaWlpqamp2dnZ+fn6CgoKGhoaKioqOjo6SkpKWlpaampqenp6ioqKmpqaqqqqurq66urrCwsLOzs7a2tre3t7i4uLm5ubu7u7y8vL29vb6+vsDAwMPDw8TExMXFxcbGxsfHx8jIyMnJycvLy83Nzc/Pz9DQ0NLS0tPT09TU1NXV1dfX19jY2NnZ2dra2tvb29zc3N7e3uDg4OHh4ePj4+Xl5ebm5ujo6Orq6uvr6+3t7e/v7/Dw8PHx8fPz8/T09PX19ff39/j4+Pn5+fr6+vv7+/z8/P39/f7+/v///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAAWQAnAAAI/wBFCRxIsKDBgwgTKlzIsKHCTH3kOJxIsaLFgopGdChzsaPHjwRnJDEDsqTJhqAagKlzsqVLUaHIjPmCQEynlzg/bnLxRpSMFGNyCr2oY4lAEFU4Dl3aMM+BSaIqHQhD6GOoJUFMPGF6sYcLgVYgnAFph4OoSwQEca2IIocoRCBwcGEDNSEnSnYBCcTAMtJah1wU/EgD5ISIRApBGdnEENIETaL+bPnbkBIngZYYTmG5ENQMOAOVqKV88tIKhp92tCEIiQbpk12wLOSEY44oTVcGrpD0cRGNDxZUGFoLQ89CJgkoUJBgZGCSLh8tOBHFiQUFT1wlPBq45oKHT6KaPP/Ak1BLEI+gQihlA2C0wO7fw48HSQnA5YGFBuxxMyTJooRofHDSGAHgRVB++/X3n0AWNOjggxA2qIVAhQhgEA1K+MCQGxUU1AkJIIYYohAKtWDDQRhqaNIeBhhExgB0MBSHAwWFgsiNOOLYSHkZVHLQizGadAcCBkUxwCAMzcFASVeU4ONBRiJpkiAFFHRJESZIwdAbE3jowpdggnmEQaAUocNNk9hG0JVZnuQIAAPBkUcNjUixQSgLqaFBjX706aefhxSUyQszBCKIIFkUEeecdd550gKYCIQEA0ExEkEMQSLkxYkddQHAp6AqKimloliKqUkiINIRFFS8lhBEEi2T9ARJF9mgl6sGZbQRQ4rccBEnJOCKkEi0LsTDjhWBgYawZKrEEnzgiUfeQJKMSRElRDA7UEwz1XSTKAjy519Bh0BCER+MabtTTz8FNVCK2r5U1FFJEQRkvC05BZVUVBEUJb4neQWWWGtiqSXAJbX1VlxzTSInnXbiifBHgQ1W2GGiTFrppZlOfJFlmHks8sgkMxsQADs=
译成目标对象:
解码代码:
private static Bitmap ToImage(string text)
{
string base64 = text;
byte[] bytes = Convert.FromBase64String(base64);
MemoryStream memStream = new MemoryStream(bytes);
BinaryFormatter binFormatter = new BinaryFormatter();
//Image img = (Image)binFormatter.Deserialize(memStream);
MemoryStream ms = new MemoryStream(bytes);
Bitmap bmp = new Bitmap(ms);
return bmp;
}
private void button1_Click(object sender, EventArgs e)
{
//GetHtml();
pictureBox1.Image = ToImage(textBox2.Text);
}
注意:
解码时,传入Base-64 字符串时,一定不能携带”data:image/gif;base64,“前缀。小编在此就走了很多弯路。
项目演示:
点击生成:
生成译码图像
2.编码
目标图像:
目标编码:
data:image/gif;base64,R0lGODlhWQAnAPcAAAAAAAICAgUFBQYGBgcHBwgICAkJCQoKCgsLCw0NDQ4ODhAQEBISEhMTExYWFhkZGRoaGhwcHB8fHyEhISQkJCUlJScnJyoqKisrKywsLDIyMjMzMzQ0NDU1NTg4ODw8PD4+PkBAQEFBQUJCQkNDQ0ZGRkdHR0hISElJSUpKSktLS0xMTE1NTU5OTk9PT1BQUFRUVFVVVVZWVldXV1hYWFpaWlxcXF1dXV5eXmBgYGFhYWRkZGVlZWZmZmdnZ2hoaGtra2xsbG1tbW5ubm9vb3BwcHR0dHZ2dnd3d3t7e35+fn9/f4CAgIKCgoSEhIWFhYaGhoiIiIqKio2NjY6Ojo+Pj5CQkJGRkZWVlZaWlpqamp2dnZ+fn6CgoKGhoaKioqOjo6SkpKWlpaampqenp6ioqKmpqaqqqqurq66urrCwsLOzs7a2tre3t7i4uLm5ubu7u7y8vL29vb6+vsDAwMPDw8TExMXFxcbGxsfHx8jIyMnJycvLy83Nzc/Pz9DQ0NLS0tPT09TU1NXV1dfX19jY2NnZ2dra2tvb29zc3N7e3uDg4OHh4ePj4+Xl5ebm5ujo6Orq6uvr6+3t7e/v7/Dw8PHx8fPz8/T09PX19ff39/j4+Pn5+fr6+vv7+/z8/P39/f7+/v///wAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAACwAAAAAWQAnAAAI/wBFCRxIsKDBgwgTKlzIsKHCTH3kOJxIsaLFgopGdChzsaPHjwRnJDEDsqTJhqAagKlzsqVLUaHIjPmCQEynlzg/bnLxRpSMFGNyCr2oY4lAEFU4Dl3aMM+BSaIqHQhD6GOoJUFMPGF6sYcLgVYgnAFph4OoSwQEca2IIocoRCBwcGEDNSEnSnYBCcTAMtJah1wU/EgD5ISIRApBGdnEENIETaL+bPnbkBIngZYYTmG5ENQMOAOVqKV88tIKhp92tCEIiQbpk12wLOSEY44oTVcGrpD0cRGNDxZUGFoLQ89CJgkoUJBgZGCSLh8tOBHFiQUFT1wlPBq45oKHT6KaPP/Ak1BLEI+gQihlA2C0wO7fw48HSQnA5YGFBuxxMyTJooRofHDSGAHgRVB++/X3n0AWNOjggxA2qIVAhQhgEA1K+MCQGxUU1AkJIIYYohAKtWDDQRhqaNIeBhhExgB0MBSHAwWFgsiNOOLYSHkZVHLQizGadAcCBkUxwCAMzcFASVeU4ONBRiJpkiAFFHRJESZIwdAbE3jowpdggnmEQaAUocNNk9hG0JVZnuQIAAPBkUcNjUixQSgLqaFBjX706aefhxSUyQszBCKIIFkUEeecdd550gKYCIQEA0ExEkEMQSLkxYkddQHAp6AqKimloliKqUkiINIRFFS8lhBEEi2T9ARJF9mgl6sGZbQRQ4rccBEnJOCKkEi0LsTDjhWBgYawZKrEEnzgiUfeQJKMSRElRDA7UEwz1XSTKAjy519Bh0BCER+MabtTTz8FNVCK2r5U1FFJEQRkvC05BZVUVBEUJb4neQWWWGtiqSXAJbX1VlxzTSInnXbiifBHgQ1W2GGiTFrppZlOfJFlmHks8sgkMxsQADs=
项目解释:
1.制作了一个上传按钮,目的是可以打开一个文件对话框,把我们需要读取的图片文件名字赋给textbox3。
2.点击获取图片,就可以获得目标图像。
3.我们获取这个图像的目的,是让这个picturebox保存我们需要的图片,然后在我们编码的时候,可以根据picturebox读取图片的Bitmap数据类型,来实现编码。
项目演示:
1.先点击上传,将文件路径置入textbox里。
上传按钮点击事件代码如下:
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.InitialDirectory = "D:\\江锦\\";
openFileDialog.Filter = "图片文件|*.*|图片文件|*.jip|所有文件|*.*";
openFileDialog.RestoreDirectory = true;
openFileDialog.FilterIndex = 1;
if (openFileDialog.ShowDialog() == DialogResult.OK)
{
textBox3.Text = openFileDialog.FileName;
FileInfo fileOpen = new FileInfo(textBox3.Text);
}
代码图:
2.第二步就是获取图片到picturebox里。
获取图片按钮事件代码:
FileStream fs = File.OpenRead(textBox3.Text); //OpenRead
int filelength = 0;
filelength = (int)fs.Length; //获得文件长度
Byte[] image = new Byte[filelength]; //建立一个字节数组
fs.Read(image, 0, filelength); //按字节流读取
System.Drawing.Image result = System.Drawing.Image.FromStream(fs);
fs.Close();
Bitmap bit = new Bitmap(result);
pictureBox2.Image = bit;
代码图:
、
3.第三步,将图片编码成Base64字符串。
编码按钮事件代码:
private void button4_Click(object sender, EventArgs e)
{
string head = @"data:image/gif;base64,";
textBox2.Text=head+ ToBase64(pictureBox2.Image);
}
private string ToBase64(Image image1)
{
Image img = image1;
BinaryFormatter binFormatter = new BinaryFormatter();
MemoryStream memStream = new MemoryStream();
binFormatter.Serialize(memStream, img);
byte[] bytes = memStream.GetBuffer();
string base64 = Convert.ToBase64String(bytes);
return base64;
}
代码图:
总结
主要涉及到封装两个方法。
第一个是编码方法:
private string ToBase64(Image image1)
{
Image img = image1;
BinaryFormatter binFormatter = new BinaryFormatter();
MemoryStream memStream = new MemoryStream();
binFormatter.Serialize(memStream, img);
byte[] bytes = memStream.GetBuffer();
string base64 = Convert.ToBase64String(bytes);
return base64;
}
它的目的是将图片,编码成Base64字符串。
而第二个是解码方法:
private static Bitmap ToImage(string text)
{
string base64 = text;
byte[] bytes = Convert.FromBase64String(base64);
MemoryStream memStream = new MemoryStream(bytes);
BinaryFormatter binFormatter = new BinaryFormatter();
//Image img = (Image)binFormatter.Deserialize(memStream);
MemoryStream ms = new MemoryStream(bytes);
Bitmap bmp = new Bitmap(ms);
return bmp;
}
它的目的是将Base64字符串,编码成图片。