在java中压缩base 64 png图像

时间:2014-02-21 07:14:20

标签: java web-services tomcat cxf

您好我想知道Java中是否有任何方法可以减小图像的大小。实际上,我的前端是IOS,它们正在发送Base 64编码数据,当我得到编码数据时,我m解码编码数据并存储在字节数组中。现在我想压缩java中的PNG图像和我的方法代码

public String  processFile(String strImageBase64, String strImageName,String donorId)
{       
    FileOutputStream fos =null;
    File savedFile=null;
    try
    {            
        String FileItemRefPath = propsFPCConfig.getProperty("fileCreationReferencePath");
        String imageURLReferncePath = propsFPCConfig.getProperty("imageURLReferncePath");
        File f = new File(FileItemRefPath+"\\"+"productimages"+"\\"+donorId);            
        String strException = "Actual File "+f.getName();            
        if(!f.exists())
        {
            boolean isdirCreationStatus = f.mkdir();                
        }            
        String strDateTobeAppended = new SimpleDateFormat("yyyyMMddhhmm").format(new Date(0));            
        String fileName = strImageName+strDateTobeAppended;            
        savedFile = new File(f.getAbsolutePath()+"\\"+fileName);            
        strException=strException+" savedFile "+savedFile.getName();            
        Base64 decoder = new Base64();            
        byte[] decodedBytes = decoder.decode(strImageBase64);                                    
        if( (decodedBytes != null) && (decodedBytes.length != 0) )
        {
            System.out.println("Decoded bytes length:"+decodedBytes.length);
            fos = new FileOutputStream(savedFile);                                
            System.out.println(new String(decodedBytes) + "\n") ;
            int x=0;
            {
                fos.write(decodedBytes, 0, decodedBytes.length);
            }
            fos.flush();
        }
        //System.out.println(savedFile.getCanonicalPath() +" savedFile.getCanonicalPath()  ");            
        if(fos != null)
        {
            fos.close();
            return savedFile.getAbsolutePath();
        }
        else
        {
            return null;
        }
    }
    catch(Exception e)
    {            
        e.printStackTrace();
    }
    finally
    {
        try
        {
            if( fos!= null)
            {
                fos.close();
            }
            else
            {
                savedFile = null;
            }
        }
        catch (IOException e)
        {                
            e.printStackTrace();
        }
    }        
    return savedFile.getName();
}

我正在使用imagename存储此解码数据,现在我想将此压缩图像存储在其他网址中

1 个答案:

答案 0 :(得分:1)

我认为这不值得付出努力。

PNG已经具有非常高的压缩水平。通过额外的压缩很难减小尺寸。

如果您确实将图像或响应Base64编码发送到客户端,当然有一些方法可以提高传输速率:在服务器上启用gzip压缩,以便HTTP响应将被gzip压缩。如果原始数据是Base64编码的话,这会减少要传输的实际字节数(这基本上意味着每个字节只使用6位8位)。启用gzip压缩对您的服务器代码是透明的,对于大多数Web服务器来说只是一个配置切换。