java 用Base64压缩图片后图片怎么越来越模糊啊?
        我这里服务端只储存图片的16进制字符串。所以我要先把16进制的字符串转换成String,再转换成Drawable.
        同理要是传送图片到服务端,也是一样,将Drawable转换成String,在转换成16进制字符串。最近发现,我对一张图片一直进行这些操作(16->string->Drawable->string->16->......)
        图片会越来越模糊,最后图片就不能显示了,这些事我转换图片和字符串的代码:
        /**
 * 16进制字符串转换成String
 *
 * @param hexStr
 * @return
 */
public String hexStr2Str(String hexStr) {
    if (hexStr==null)
        return null;
    String str = "0123456789ABCDEF";
    char[] hexs = hexStr.toCharArray();
    byte[] bytes = new byte[hexStr.length() / 2];
    int n;
    for (int i = 0; i < bytes.length; i++) {
        n = str.indexOf(hexs[2 * i]) * 16;
        n += str.indexOf(hexs[2 * i + 1]);
        bytes[i] = (byte) (n & 0xff);
    }
    return new String(bytes);
}


    /**
 * String转换drawable
 *
 * @param icon
 * @return
 */
public Drawable byteToDrawable(String icon) {
    byte[] img = null;
    try {
        img = Base64.decode(icon.getBytes(), Base64.DEFAULT);
    }catch (Exception e){

    }

    Bitmap bitmap;
    if (img != null) {
        bitmap = BitmapFactory.decodeByteArray(img, 0, img.length);
        @SuppressWarnings("deprecation")
        Drawable drawable = new BitmapDrawable(bitmap);

        return drawable;
    }
    return null;

}









    /**
 * 图片转换成字符串
 *
 * @param drawable
 * @return
 */
public String drawableToByte(Drawable drawable) {
    if (drawable != null) {
        Bitmap bitmap = Bitmap
                .createBitmap(
                        drawable.getIntrinsicWidth(),
                        drawable.getIntrinsicHeight(),
                        drawable.getOpacity() != PixelFormat.OPAQUE ? Bitmap.Config.ARGB_8888
                                : Bitmap.Config.RGB_565);
        Canvas canvas = new Canvas(bitmap);
        drawable.setBounds(0, 0, drawable.getIntrinsicWidth(),
                drawable.getIntrinsicHeight());
        drawable.draw(canvas);
        int size = bitmap.getWidth() * bitmap.getHeight() * 4;
        // 创建一个字节数组输出流,流的大小为size
        ByteArrayOutputStream baos = new ByteArrayOutputStream(size);
        // 设置位图的压缩格式,质量为100%,并放入字节数组输出流中
        bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
        // 将字节数组输出流转化为字节数组byte[]
        byte[] imagedata = baos.toByteArray();
        String icon = Base64.encodeToString(imagedata, Base64.DEFAULT);
        return icon;
    }
    return null;
}



    /**
 * 字符串转换成十六进制字符串
 *
 * @param str
 * @return
 */
public String str2HexStr(String str) {
    char[] chars = "0123456789ABCDEF".toCharArray();
    StringBuilder sb = new StringBuilder("");
    byte[] bs = str.getBytes();
    int bit;
    for (int i = 0; i < bs.length; i++) {
        bit = (bs[i] & 0x0f0) >> 4;
        sb.append(chars[bit]);
        bit = bs[i] & 0x0f;
        sb.append(chars[bit]);
    }
    return sb.toString();
}



    这些代码都是网上copy的,也不晓得哪里有问题。

1个回答

bitmap.compress(Bitmap.CompressFormat.JPEG, 100, baos);
这个压缩是有损的,压缩一次,图像质量就降低一次

qq_35071078
下课睡觉 但是服务端默认的是接收图片的16进制字符串,那要怎么弄啊
接近 3 年之前 回复
caozhy
贵阳老马马善福专门编写代码的老马就是我! 回复下课睡觉: 不需要压缩,直接输出bmp,或者用png是无损的。
接近 3 年之前 回复
qq_35071078
下课睡觉 那怎么样才能够无损的压缩啊
接近 3 年之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!
其他相关推荐
Android 图片压缩图片转Base64工具类
Android 图片压缩图片转Base64工具类 /** * 质量压缩 * * @param bm * @param size * 压缩到小于或者等于这个尺寸的图片 * @return */ public Bitmap compressImage(Bitmap bm, int size) { ByteArrayOutputStream b
js压缩图片,js图片base64压缩上传
图片通过js代码压缩,通过base64压缩图片,修改图片质量或尺寸达到压缩图片体积
base64之js压缩图片
在日常的一些项目中会有上传图片之类的接口,如果图片过大了再上传的时候是非常的耗时以及占用资源,在这里就给大家分享一下如何在js中把大的图片压缩成小的图片,我这里的功能是用户点击按钮调用相机或者选择文件后进行压缩的: 直接上代码 /* 三个参数 file:一个是文件(类型是图片格式), w:一个是文件压缩的后宽度,宽度越小,字节越小 ...
H5移动端Base64压缩图片
运用了canvas技术,将照片格式转成base64格式,直接下载,建议用Hbuilder打开。
js压缩图片base64长度
var myCanvas=$('.img-container > img').cropper('getCroppedCanvas'); (function (base64){ var image = new Image(),newBase64,MAX_HEIGHT = 160; image.onload = function(){ var canvas = docu
canvas压缩图片和base64上传图片
canvas压缩图片和base64上传图片html:&amp;lt;input type=&quot;text&quot; onchange=&quot;upload&quot;&amp;gt;javaScriptfunction upload() { var file=this.files[0]; uploadImg(file,1).then(function (data) { //data 就是base64返回值 }) }fun...
前段base64压缩图片upload上传
img base64 upload
java 图片压缩图片图片变色问题
java图片压缩,压缩前图片为:[img=https://img-bbs.csdn.net/upload/201507/17/1437136567_765764.jpg][/img]rn压缩后图片颜色改变:[img=https://img-bbs.csdn.net/upload/201507/17/1437136620_608940.jpg][/img]rnrn压缩代码:[code=java]rnimport java.awt.Color;rnimport java.awt.Graphics2D;rnimport java.awt.Image;rnimport java.awt.geom.AffineTransform;rnimport java.awt.image.AffineTransformOp;rnimport java.awt.image.BufferedImage;rnimport java.io.File;rnimport java.io.IOException;rnrnimport javax.imageio.ImageIO;rnrnpublic class ddd rn /**rn * 缩放图像(按高度和宽度缩放)rn * @param srcImageFile 源图像文件地址rn * @param result 缩放后的图像地址rn * @param height 缩放后的高度rn * @param width 缩放后的宽度rn * @param bb 比例不对时是否需要补白:true为补白; false为不补白;rn */rn public final static void scale2(String srcImageFile, String result, int height, int width, boolean bb) rn try rn double ratio = 0.0; // 缩放比例rn File f = new File(srcImageFile);rn BufferedImage bi = ImageIO.read(f);rn Image itemp = bi.getScaledInstance(width, height, BufferedImage.SCALE_SMOOTH);rn // 计算比例rn if ((bi.getHeight() > height) || (bi.getWidth() > width)) rn if (bi.getHeight() > bi.getWidth()) rn ratio = (new Integer(height)).doubleValue()rn / bi.getHeight();rn else rn ratio = (new Integer(width)).doubleValue() / bi.getWidth();rn rn AffineTransformOp op = new AffineTransformOp(AffineTransformrn .getScaleInstance(ratio, ratio), null);rn itemp = op.filter(bi, null);rn rn if (!bb) //补白rn BufferedImage image = new BufferedImage(width, height,rn BufferedImage.TYPE_INT_RGB);rn Graphics2D g = image.createGraphics();rn g.fillRect(0, 0, width, height);rn if (width == itemp.getWidth(null))rn g.drawImage(itemp, 0, (height - itemp.getHeight(null)) / 2,rn itemp.getWidth(null), itemp.getHeight(null),rn Color.white, null);rn elsern g.drawImage(itemp, (width - itemp.getWidth(null)) / 2, 0,rn itemp.getWidth(null), itemp.getHeight(null),rn Color.white, null);rn g.dispose();rn itemp = image;rn rn ImageIO.write((BufferedImage) itemp, "JPEG", new File(result));rn catch (IOException e) rn e.printStackTrace();rn rn rn public static void main(String[] args) rn ddd.scale2("d:/desktop/c/1.jpg", "d:/desktop/d/14.jpg", 400, 400, true);//测试OKrn rn[/code]
Java base64 图片编码转换
Java base64 图片编码转换 package com.test; import org.junit.Test; import sun.misc.BASE64Decoder; import sun.misc.BASE64Encoder; import java.io.*; /** *BASE64 */ public clas...
Java图片Base64编码
//##########################################################//    String uploadDir = com.bstek.dorado.core.Configure.getString(      Constants.file_upload_config_path);    String filePath = uploadDir ...
java 图片base64 加密解密
java 图片base64 加密解密 代码 包括jar
解决java 图片压缩图片图片变色问题
最近有人遇到在处理在用Java进行图片压缩的时候,压缩后图片的背景色发生了变色,如图所示: 压缩前: 压缩后: 经查阅相关资料后发现可以用阿里巴巴的SImpleImage可以解决这个问题。 主要依赖以下jar包:commons-io-2.4.jar、commons-lang.jar、commons-logging-1.1.1.jar、jai_codec-1.1.3.jar、jai_
Base64图片工具类-JAVA
/** * 作者: fcy * 时间: 2017/5/25 * 描述:图片工具类 */ public class ImageUtil { /** * 作者: fcy * 时间: 2017/5/26 * 描述:将图片地址进行base64编码 */ public static String encodeImgageToBase64(URL
java 压缩图片 图片长度和宽度固定 怎么调整图片的分辨率
这是压缩图片的方法:rn//压缩图片rn private static BufferedImage resize(BufferedImage source, int targetW, rn int targetH) rn // targetW,targetH分别表示目标长和宽 rn int type = source.getType(); rn BufferedImage target = null; rn double sx = (double) targetW / source.getWidth(); rn double sy = (double) targetH / source.getHeight(); rn // 这里想实现在targetW,targetH范围内实现等比缩放。如果不需要等比缩放 rn // 则将下面的if else语句注释即可 rn if (sx < sy) rn sy = sx; rn targetH = (int) (sx * source.getHeight()); rn else rn sx = sy; rn targetW = (int) (sy * source.getWidth()); rn rn if (type == BufferedImage.TYPE_CUSTOM) // handmade rn ColorModel cm = source.getColorModel(); rn WritableRaster raster = cm.createCompatibleWritableRaster(targetW, rn targetH); rn boolean alphaPremultiplied = cm.isAlphaPremultiplied(); rn target = new BufferedImage(cm, raster, alphaPremultiplied, null); rn else rn target = new BufferedImage(targetW, targetH, type); rn Graphics2D g = target.createGraphics(); rn // smoother than exlax: rn g.setRenderingHint(RenderingHints.KEY_INTERPOLATION, rn RenderingHints.VALUE_INTERPOLATION_BICUBIC); rn g.drawRenderedImage(source, AffineTransform.getScaleInstance(sx, sy)); rn g.dispose(); rn return target; rn rn最终压缩完的图片 高和宽不会大于150,也就是说在图片的长度和宽度不变的情况下,怎么增加图片的清晰度,效果图如下:[img=http://img.my.csdn.net/uploads/201212/20/1355969795_2130.jpg][/img]
java 用base64读取解析图片
[code=&quot;java&quot;] package test; import java.io.FileInputStream; import java.io.RandomAccessFile; public class ReadImage { /** * @param args */ public static void main(String[] args) {...
java生成模糊图片
简单类实现生成模糊图片 非常实用 非常简单
Java base64编码图片代码,base64 jar包
https://blog.csdn.net/qq_37604915/article/details/80648850
base64解码图片,搞不定啊
用c#很容易rnbyte[] temp = Convert.FromBase64String(strbase);rnFile.WriteAllBytes(@"d:\d1.png", temp);rn这样就好了,而且保存的文件也没有问题。rnrn可以用vc就总是不行。网上找了2个算法,解码后两个值都不相同,跟c#解析出来的也不同。保存成文件后,能显示图片的大小,可是图片总是打不开。rnrn两种算法,如下:rn//Base64 解码rn static char GetBase64Value(char ch) //得到编码值rn rn if ((ch >= 'A') && (ch <= 'Z')) // A ~ Zrn return ch - 'A';rn if ((ch >= 'a') && (ch <= 'z')) // a ~ zrn return ch - 'a' + 26;rn if ((ch >= '0') && (ch <= '9')) // 0 ~ 9rn return ch - '0' + 52;rn switch (ch) // 其它字符rn rn case '+':rn return 62;rn case '/':rn return 63;rn case '=': //Base64 填充字符rn return 0;rn default:rn return 0;rn rn rn // 解码函数rn static int Base64Decode( char *OrgString, char *Base64String, int Base64StringLen, bool bForceDecode ) //解码函数rn rn // OrgString 保存解码结果字符串指针rn // Base64String 待解码字符串指针rn // Base64StringLen 待解码字符串长度rn // bForceDecode 当待解码字符串长度错误时,是否强制解码rn // true 强制解码rn // false 不强制解码rn if( Base64StringLen % 4 && !bForceDecode ) //如果不是 4 的倍数,则 Base64 编码有问题rn rn OrgString[0] = '\0';rn return -1;rn rn unsigned char Base64Encode[4];rn int OrgStringLen=0;rn rn while( Base64StringLen > 2 ) //当待解码个数不足3个时,将忽略它(强制解码时有效)rn rn Base64Encode[0] = GetBase64Value(Base64String[0]);rn Base64Encode[1] = GetBase64Value(Base64String[1]);rn Base64Encode[2] = GetBase64Value(Base64String[2]);rn Base64Encode[3] = GetBase64Value(Base64String[3]);rn rn *OrgString ++ = (Base64Encode[0] << 2) | (Base64Encode[1] >> 4);rn *OrgString ++ = (Base64Encode[1] << 4) | (Base64Encode[2] >> 2);rn *OrgString ++ = (Base64Encode[2] << 6) | (Base64Encode[3]);rn rn Base64String += 4;rn Base64StringLen -= 4;rn OrgStringLen += 3;rn rn rn return OrgStringLen;rn rn static long bBase64Decode( string &OrgString,const char* pSrc,int nSrcLen)rn rn int nValue,i=0;rn const char DeBase64Tab[]=rn rn 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,rn 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,rn 62, // '+'rn 0, 0, 0,rn 63, // '/'rn 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, // '0'-'9'rn 0, 0, 0, 0, 0, 0, 0,rn 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,rn 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, // 'A'-'Z'rn 0, 0, 0, 0, 0, 0,rn 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38,rn 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51, // 'a'-'z'rn ;rn // 取4个字符,解码到一个长整数,再经过移位得到3个字节rn while (i < nSrcLen)rn rn if (*pSrc != '\r' && *pSrc!='\n')rn rn nValue = DeBase64Tab[*pSrc++] << 18;rn nValue += DeBase64Tab[*pSrc++] << 12;rn OrgString += (nValue & 0x00ff0000) >> 16;rn rn if (*pSrc != '=')rn rn nValue += DeBase64Tab[*pSrc++] << 6;rn OrgString += (nValue & 0x0000ff00) >> 8;rn rn if (*pSrc != '=')rn rn nValue += DeBase64Tab[*pSrc++];rn OrgString +=nValue & 0x000000ff;rn rn rn rn i += 4;rn rn else // 回车换行,跳过rn rn pSrc++;rn i++;rn rn rn return OrgString.length();rn rnrn谢谢大家,着急
java 压缩图片
java 实现按比例压缩图片, 封装好了方法, 传入图片路径就可以测试使用了
java压缩图片
import java.awt.Image;   import java.awt.image.BufferedImage;   import java.io.File;   import java.io.FileNotFoundException;   import java.io.FileOutputStream;   import java.io.IOException;   import ...
java绘制图片以原图为标准生成BASE64可以作压缩图片用
public static String getCompressBase64FromUrl(String url, int width, int height) throws Exception {         BufferedImage img = ImageIO.read(new File(url));         int width1 = img.getWidth();       ...
JAVA压缩图片
JAVA压缩图片 源代码下载地址:http://www.zuidaima.com/share/1721461886028800.htm
Java 压缩图片
import java.awt.AlphaComposite; import java.awt.Color; import java.awt.Font; import java.awt.Graphics2D; import java.awt.Image; import java.awt.RenderingHints; import java.awt.image.BufferedImag
计算图片采样率压缩图片
1:创建工具类,用来计算采样率 public class ImageResizer { /** * 计算采样率 * @param options * @param requestWidth * @param requestHeight * @return */ public static int calculateIn
图片压缩软件【压缩图片】
图片压缩软件【压缩图片】 图片压缩软件 文件小,压缩能力强
ci框架经canvas压缩图片后经base64上传
ci框架经canvas压缩图片后经base64上传
java 压缩图片
pom文件 &amp;lt;dependency&amp;gt; &amp;lt;groupId&amp;gt;net.coobird&amp;lt;/groupId&amp;gt; &amp;lt;artifactId&amp;gt;thumbnailator&amp;lt;/artifactId&amp;gt; &amp;lt;version&amp;gt;0.4.8&amp;lt;/version&amp;gt; &amp;lt;/dependency&amp;gt; 代码 publi
java图片编码base64以及base64转换为图片代码
package com.givenera.appapi.util; import java.io.File; import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; public class ImageBase64 { public static void main(S...
BASE64图片编码怎么解码
以下是JAVA做的编码流程rn1、从数据库中以二进制流的方式获取:InputStream instream = blob.getBinaryStream();rn2、将instream转存入字节数组bytern3、将byte经过base64编码存入一个字符串String str=new sun.misc.BASE64Encoder().encode(byte)rn怎样把这str字符串解码成图片,最好有示例代码,先谢谢了
base64图片要怎么上传服务器
如题,能帮忙写个示例代码吗
Java将图片转Base64
Base64是网络上最常见的用于传输8Bit字节代码的编码方式之一。Base64编码可用于在HTTP环境下传递较长的标识信息。例如,在Java Persistence系统Hibernate中,就采用了Base64来将一个较长的唯一标识符(一般为128-bit的UUID)编码为一个字符串,用作HTTP表单和HTTP GET URL中的参数。在其他应用程序中,也常常需要把二进制数据编码为适合放在URL(
java 图片与base64互转的工具类
该工具类支持将图片转换为base64,或者将base64码转换为图片,并且附带图片灰化处理,简单容易理解。
(java)Base64 图片编码&&解码
在最近的项目开发过程中,我们需要将图片进行编码进行储存,或者将调取的文件转成图片进行传送,采用的转换方式则是通过Base64的编码,解码操作。 在平常的使用过程中,主要还是使用Base64进行代码的加密解密操作,记得上篇则是因为换行符的问题困惑的许久,(链接) 图片解码操作: 在项目的开发过程中,我们需要进行接口调用的操作,将获取到的Base64文件编码成图片放到本地(或其他的位置):通过调用接口获取到的Base64文件:
java base64字符与图片互转
import java.io.FileInputStream;  import java.io.FileOutputStream;  import java.io.IOException;  import java.io.InputStream;  import java.io.OutputStream;    import sun.misc.BASE64Decoder;  import sun....
【JAVA】图片与BASE64互相转换
在项目中用到了图片转base64,以前没碰到过,所以在这里做个记录。 BASE64转图片 主要就是把图片转换成字节,当然你也可以通过new String(bytes,“UTF-8”); 获取字符串 public static boolean base64ToImg(String imgbase64, String imgPath){ if (imgbase64 == null)...
截取图片拍照压缩图片
截取图片,拍照,压缩图片等功能,欢迎讨论
图片等比压缩图片?
上传图片图片的时候怎么吧上传的图片等比压缩?
Java 图片上传图片转base64
图片转base64 //files upload public String uploadiong(MultipartFile file) throws Exception{ boolean image = isImage(file.getInputStream()); if (image) { BASE64Encoder enco...
Java Base64在线转图片
方式一:只能对本地图片进行转码 import java.io.FileInputStream; import java.io.IOException; import java.io.InputStream; import org.apache.commons.codec.binary.Base64; public class Base64Util {     public static vo...
java图片转base64注意事项
java转base64有两点需要注意的地方,在window操作系统中,图片转换为base64,在base64的字符串中会有默认换行,这就破坏了json格式,所以这里需要做一下处理。除此之外,在java转base64时,会缺少base64字符串,这里需要我们手动添加。 头部格式: 代码如下: BASE64Encoder encoder = new BASE64Encoder(); ...
相关热词 c#检测非法字符 c#双屏截图 c#中怎么关闭线程 c# 显示服务器上的图片 api嵌入窗口 c# c# 控制网页 c# encrypt c#微信网页版登录 c# login 居中 c# 考试软件