一张图片的BASE64码转成二进制,存到sql中,从sql中读出来再转成base64前后不一致。
一般数据库dll组件会有提供相应类型的数据获取方法。如果是SqlDbType.Binary的话,建议是用SqlDataReade对应的GetSqlBinary方法获取SqlBinary对象,再调用SqlBinary对象的valuen属性获取byte[]值,减少出现转码问题。 最后,Photo属性赋值的是BASE64字符串,存进数据库里的本般就是BASE64的二进制,从数据库获取后,直接二进制转成字符串就行了,不用调用Convert.ToBase64String。Convert.ToBase64String的作用是转成BASE64字符串
将图片转成二进制并生成Base64编码字符串,再将二进制转换成各种图片 import java.awt.image.BufferedImage;import java.io.ByteArrayInputStream;import java.io.ByteArrayOutputStream;import java.io.File;import java.io.IOException;
import javax.imageio.ImageIO;
import sun.misc.BASE64Decoder;import sun.misc.BASE64Encoder;
public class TestImageBinary {static BASE64Encoder encoder = new sun.misc.BASE64Encoder();static BASE64Decoder decoder = new sun.misc.BASE64Decoder();
public static void main(String[] args) { System.out.println(getImageBinary()); base64StringToImage(getImageBinary()); } static String getImageBinary(){ File f = new File("c://20090709442.jpg"); BufferedImage bi; try { bi = ImageIO.read(f); ByteArrayOutputStream baos = new ByteArrayOutputStream(); ImageIO.write(bi, "jpg", baos); byte[] bytes = baos.toByteArray(); return encoder.encodeBuffer(bytes).trim(); } catch (IOException e) { e.printStackTrace(); } return null; } static void base64StringToImage(String base64String){ try { byte[] bytes1 = decoder.decodeBuffer(base64String); ByteArrayInputStream bais = new ByteArrayInputStream(bytes1); BufferedImage bi1 =ImageIO.read(bais); File w2 = new File("c://QQ.bmp");//可以是jpg,png,gif格式 ImageIO.write(bi1, "jpg", w2);//不管输出什么格式图片,此处不需改动 } catch (IOException e) { e.printStackTrace(); } }
}
二进制与base64编码转换C代码
需要一个二进制与BASE64相互转换的函数,从网上找了几个,或者是错的,或者不输出长度,待转的二进制串中有可能出现00截断,因此不能直接以strlen来计算长度,所以我引用网上的一个可用代码后加以修改,变成现在的接口形式。示例中提供二进制与16进制字符串转换函数ConvertHexStrToBin与ConvertBinToHexStr,二进制与BASE64编码转换函数Base64Encode与Base64Decode,在VC6下编译通过可用。
将图片转成二进制并生成Base64编码,可以在网页中通过url查看图片:
data格式的Url最直接的好处是,这些Url原本会引起一个新的网络访问,因为那里是一个网页的地址,现在不会有新的网络访问了,因为现在这里是网页的内容。这样做,会减少服务器的负载,当然同时也增加了当前网页的大小。所以对“小”数据特别有好处。
显示网络图片和base64二进制图片
显示网络图片“”
在这里我使用的是SDWebImage源码, 首先我们需要下载SDWebImage的源码,地址为:https://github.com/rs/SDWebImage 把下载下来的代码中得 SDWebImage文件夹导入(copy)工程中, 需要用到网络下载图片的地方,引入头文件 #import "UIImageView+WebCache.h" 然后根据自己的需求调用函数即可,
图片上传 除了二进制和base64还有其他的格式吗?这个问题 其实什么格式都行,只要你们的服务器能解析出来,因为不管是什么格式,最后都是传的二进制的数据流。你就算把图片加密后再上传,依然是一堆二进制的数据,你们的服务器需要解密,或者直接存二进制数据,等着你们下载到App自己解密。