在传统的.net应用中,使用base64编码字符串是一件很轻松的事情,比如下面这段代码演示了如何将本地文件转化为base64字符串,并且将base64字符串又还原为图片文件.

base64编码在传统.net程序中的应用(by 菩提树下的杨过 http://yjmyzz.cnblogs.com/)

using System;
using System.Drawing;
using System.Drawing.Imaging;
using System.IO;

namespace Base64Study
{
    /// <summary>
    /// base64编码在传统.net程序中的应用(by 菩提树下的杨过 http://yjmyzz.cnblogs.com/)
    /// </summary>
    class Program
    {
        static void Main(string[] args)
        {

string imgstring = GetBase64FromFile("c:\\self.png");
            Console.WriteLine(imgstring);

Bitmap bitmap = GetImageFromBase64(imgstring);
            bitmap.Save("c:\\self2.png", ImageFormat.Png);

Console.Read();
        
           
        }

/// <summary>
        /// 将文件转换为base64字符串
        /// </summary>
        /// <param name="filePath"></param>
        /// <returns></returns>
        static string GetBase64FromFile(string filePath)         
        {
            byte[] b = File.ReadAllBytes(filePath);
            return Convert.ToBase64String(b);
        }

/// <summary>
        /// 从base64字符串还原图片
        /// </summary>
        /// <param name="base64string"></param>
        /// <returns></returns>
        static Bitmap GetImageFromBase64(string base64string) 
        {
            byte[] b = Convert.FromBase64String(base64string);
            MemoryStream ms = new MemoryStream(b);
            Bitmap bitmap = new Bitmap(ms);
            return bitmap;
        }
    }
}

但是到了silverlight环境中,这种简单的操作方式却无法使用了,幸好网上有一个开源的免费组件FluxJpeg,同时国外有高人已经利用该组件写出了将位图转化为base64的方法,这里我们借用一下即可:

代码

<UserControl x:Class="SLBase64.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    mc:Ignorable="d" d:DesignWidth="640" d:DesignHeight="480">
  <StackPanel x:Name="LayoutRoot">
        <Image  x:Name="img" Height="100" Stretch="Uniform" Source="img/self.png"></Image>
        <Button x:Name="btnToBase64" Content="转为base64字符串" Width="200" Margin="0,3,0,0"  Click="btnToBase64_Click"></Button>
        <TextBox Text="" x:Name="txtBase64" TextWrapping="Wrap" Height="150" Margin="0,3" VerticalScrollBarVisibility="Auto"></TextBox>
        <Button x:Name="btnToImg" Content="将上述base64字符串还原为图片" Width="200" Margin="0,0,0,3" Click="btnToImg_Click"></Button>
        <Image  x:Name="img2" Height="100" Stretch="Uniform"></Image>
    </StackPanel>
</UserControl>

代码

using System;
using System.IO;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Media.Imaging;
using FluxJpeg.Core;
using FluxJpeg.Core.Encoder;

namespace SLBase64
{
    public partial class MainPage : UserControl
    {
        public MainPage()
        {
            InitializeComponent();
        }

/// <summary>
        /// 老外写的方法:将WriteableBitmap转化为base64位字符串
        /// </summary>
        /// <param name="bitmap"></param>
        /// <returns></returns>
        private string GetBase64Image(WriteableBitmap bitmap)
        {
            int width = bitmap.PixelWidth;
            int height = bitmap.PixelHeight;
            int bands = 3;
            byte[][,] raster = new byte[bands][,];

for (int i = 0; i < bands; i++)
            {
                raster[i] = new byte[width, height];
            }

for (int row = 0; row < height; row++)
            {
                for (int column = 0; column < width; column++)
                {
                    int pixel = bitmap.Pixels[width * row + column];
                    raster[0][column, row] = (byte)(pixel >> 16);
                    raster[1][column, row] = (byte)(pixel >> 8);
                    raster[2][column, row] = (byte)pixel;
                }
            }

ColorModel model = new ColorModel { colorspace = ColorSpace.RGB };
            FluxJpeg.Core.Image img = new FluxJpeg.Core.Image(model, raster);
            MemoryStream stream = new MemoryStream();
            JpegEncoder encoder = new JpegEncoder(img, 100, stream);
            encoder.Encode();

stream.Seek(0, SeekOrigin.Begin);
            byte[] binaryData = new Byte[stream.Length];
            long bytesRead = stream.Read(binaryData, 0, (int)stream.Length);

string base64String =
                    System.Convert.ToBase64String(binaryData,
                                                  0,
                                                  binaryData.Length);

return base64String;

}

private void btnToBase64_Click(object sender, RoutedEventArgs e)
        {
            WriteableBitmap wb = new WriteableBitmap(img, null);
            txtBase64.Text = "";
            txtBase64.Text = GetBase64Image(wb);
        }

private void btnToImg_Click(object sender, RoutedEventArgs e)
        {
            if (txtBase64.Text == "") { return; }
            try
            {
                img2.Source = null;

byte[] b = Convert.FromBase64String(txtBase64.Text);
                MemoryStream ms = new MemoryStream(b);
                BitmapImage bitImage = new BitmapImage();
                bitImage.SetSource(ms);

img2.Source = bitImage;
            }
            catch (Exception ex) { MessageBox.Show(ex.Message.ToString()); }
        }
    }
}

最后是示例源码地址:http://files.cnblogs.com/yjmyzz/Base64Study.rar

转载请注明出处(菩提树下的杨过 http://www.cnblogs.com/yjmyzz/archive/2010/01/14/1647918.html)

转载于:https://www.cnblogs.com/yjmyzz/archive/2010/01/14/1647918.html

base64编码在silverlight中的使用相关推荐

  1. 编解码:Base64编码在URL中的应用

    项目查询背景:目前项目中,本地文件全部使用UTF-8进行编码,Android网络访问全部采用Base64加密传输,因此考虑Base64和Url编码是否会有冲突,查询的结果是没有冲突,可以直接放在Url ...

  2. php判断base64编码,检测PHP中的base64编码?

    要检测PHP中的base64编码,代码如下- 示例<?php $value_1 = array(); foreach (str_split('az019AZ~~~!@#$%^*()_+|}?&g ...

  3. base64编码 springboot_Spring Boot 中如何实现 HTTP 认证?

    松哥给最近连载的 Spring Security 系列也录制了视频教程,感兴趣的小伙伴请戳这里->Spring Boot+Vue+微人事视频教程(Spring Boot 第十章就是 Spring ...

  4. java 图片转成base64编码_java语言中如何将一个图片转换为base64编码的数据呢?

    摘要: 下文讲述java语言中将图片转换为base64编码的方法分享,如下所示: 例: /* file为图片文件对象 filePath为转换后base64的存储位置 */ public static ...

  5. .Net Base64编码

    using System; using System.Text; using System.IO; using System.Security; using System.Security.Crypt ...

  6. python base64编码_JS和Python实现AES算法

    1. AES原理 AES算法是典型的对称加密算法,AES原理可以学习这两篇文档: 漫画:什么是AES算法:https://www.toutiao.com/i6783550080784794124/ A ...

  7. ios php tpbase64编码,iOS Base64编码

    一.介绍 Base64编码是一种数据编码方式,目的是让数据符合传输协议的要求.能够将任何二进制数据,转换成只有64 +1("="等号)个字符组成的文本文件. 提示:Base64不是 ...

  8. 密码学基础:Base64编码

    文章概述: 本文目的:写这篇文章的目的主要是整理下密码学中Base64的知识点,并把它们分享出来.并且帮助初探密码学的坛友们一步一步的用C语言将Base64的编码实现出来. 阅读方法:希望大家在浏览完 ...

  9. Base64编码的原理及实现(源码)

    Base64编码在邮件中最为常见,呵呵,因为我最近就是在做邮箱报警,SMTP验证就是Base64编码用户名和密码进行验证的,并且附件也是要转换成base64编码的数据,然后再发送的.该编码使用64个明 ...

  10. base64编码类------原始码(C#)

    using system; namespace shapbse64 { /// <summary> /// 有关base64编码算法的相关操作 ///by 自由奔腾(wgscd) /// ...

最新文章

  1. 初创团队最重要的是什么_我从一家出色的初创公司工作中学到的最重要的教训...
  2. IDEA查看Scala的源码
  3. MRTG 监控主机流量
  4. LeetCode Sumary - Graph
  5. 研发管理和项目管理有哪些痛点?
  6. 安徽自招计算机基础考试试题,点划自招|东南大学、中国药大2017年自主招生考情揭秘,附真题。...
  7. json rpgmv 加密_加密-如何对JSON对象进行加密哈希处理?
  8. WIN7 WIN10 资源管理器不能自动刷新的解决方法
  9. uniapp中回退到上一页面并触发函数的方法
  10. 工程伦理--4.2 划界法
  11. 手推遗传算法(Genetic Algorithm,GA)的详细步骤图解
  12. OOA/OOD/OOP(了解)
  13. CGWallpapers网站不登录下载图片
  14. 让图片固定不动的两种方法
  15. 二极管、三极管、晶闸管的区别
  16. Javascript进阶笔记
  17. make及makefile
  18. 重新定义超频 解读NVIDIA的Shader频率
  19. WindowsForm切换窗口的几种常见实现
  20. python取矩阵的一部分_Python 实现取矩阵的部分列,保存为一个新的矩阵方法

热门文章

  1. 零基础、转行学习Python是否还在纠结?这里告诉你答案!
  2. recover/panic
  3. ZKWeb网页框架2.1正式发布
  4. From Apprentice To Artisan 翻译 08
  5. asp.net DataTable导出 excel的方法记录(第三方)
  6. centos6使用bacula备份系统
  7. COCOS2D坐标系统的一些说明
  8. 我的第一个MFC小项目(4)之 位图转换(续)
  9. C++学习笔记: 混合语言编程
  10. ScrumChina 2008 上海之行