图片解压缩

import java.io.*;import java.util.zip.GZIPInputStream;import java.util.zip.GZIPOutputStream;

/** * User : Jixiaohu * Date : 2017-07-03. * Time : 16:18. */public class GzipUtils {

public static byte[] gzip(byte[] data) throws Exception {        ByteArrayOutputStream bos = new ByteArrayOutputStream();        GZIPOutputStream gzip = new GZIPOutputStream(bos);        gzip.write(data);        gzip.finish();        gzip.close();        byte[] ret = bos.toByteArray();        bos.close();        return ret;    }

public static byte[] ungzip(byte[] data) throws Exception {        ByteArrayInputStream bis = new ByteArrayInputStream(data);        GZIPInputStream gzip = new GZIPInputStream(bis);        byte[] buf = new byte[1024];        int num = -1;        ByteArrayOutputStream bos = new ByteArrayOutputStream();        while ((num = gzip.read(buf, 0, buf.length)) != -1) {            bos.write(buf, 0, num);        }        gzip.close();        bis.close();        byte[] ret = bos.toByteArray();        bos.flush();        bos.close();        return ret;    }

public static void main(String[] args) throws Exception {        //读取文件        String readPath = System.getProperty("user.dir") + File.separator                + "sources" + File.separatorChar + "006.jpg";        System.out.println(readPath);        File file = new File(readPath);        FileInputStream in = new FileInputStream(file);        byte[] data = new byte[in.available()];        in.read(data);        in.close();

System.out.println("文件原始大小:" + data.length);

//测试压缩        byte[] ret1 = GzipUtils.gzip(data);        System.out.println("压缩之后大小:" + ret1.length);

//测试解压缩        byte[] ret2 = GzipUtils.ungzip(ret1);        System.out.println("还原之后大小:" + ret2.length);

//写出文件        String writePath = System.getProperty("user.dir") + File.separatorChar                +"receive" + File.separatorChar+"006.jpg";        System.out.println(writePath);        FileOutputStream fos = new FileOutputStream(writePath);        fos.write(ret2);        fos.close();    }}
时间: 2024-07-31 09:55:03

图片解压缩的相关文章

图片的解压缩、渲染

一.图像从文件到屏幕过程 首先明确两个概念:水平同步信号.垂直同步信号. CRT 的电子枪按照上图中的方式,从上到下一行一行的扫描,扫描完成后显示器就呈现一帧画面,随后电子枪回到初始位置继续下一次的扫描.当电子枪切换到新的一行准备扫描时,显示器会发送一个水平同步信号(Horizonal Synchronization),简称HSync:完成一帧画面绘制后,电子枪会回到原位,显示器会发送一个垂直同步信号(Vertical Synchronization),简称VSync. CPU/GPU 等在这样

iOS开发>学无止境 - 异步图片加载优化与常用开源库分析

作者:罗轩(@luoyibu) 网址:http://www.jianshu.com/p/3b2c95e1404f 1. 网络图片显示大体步骤:   下载图片 图片处理(裁剪,边框等) 写入磁盘 从磁盘读取数据到内核缓冲区 从内核缓冲区复制到用户空间(内存级别拷贝) 解压缩为位图(耗cpu较高) 如果位图数据不是字节对齐的,CoreAnimation会copy一份位图数据并进行字节对齐 CoreAnimation渲染解压缩过的位图 以上4,5,6,7,8步是在UIImageView的setImag

SDWebImage图片二级缓存异步加载基本原理

关于SDWebImage SDWebImage是一个针对图片加载的插件库,提供了一个支持缓存的用于异步加载图片的下载工具,特别的为常用的UI元素:UIImageView,UIButton和MKAnnotationView提供了Category类别扩展,可以作为一个很方便的工具.其中SDWebImagePrefetcher可以预先下载图片,方便后续使用. SDWebImage的Github地址为:https://github.com/rs/SDWebImage SDWebImage的几点特性 为U

iOS 异步图片加载优化与常用开源库分析

1. 网络图片显示大体步骤: 下载图片 图片处理(裁剪,边框等) 写入磁盘 从磁盘读取数据到内核缓冲区 从内核缓冲区复制到用户空间(内存级别拷贝) 解压缩为位图(耗cpu较高) 如果位图数据不是字节对齐的,CoreAnimation会copy一份位图数据并进行字节对齐 CoreAnimation渲染解压缩过的位图 以上4,5,6,7,8步是在UIImageView的setImage时进行的,所以默认在主线程进行(iOS UI操作必须在主线程执行). 2. 一些优化思路: 异步下载图片 image

浅谈LZSS与游戏图片破解

  业余游戏制作者最头疼的就是没有美工的支持了.很多业余游戏制作所使用的图片都是来自于网上的很有限的一些图片资源,然而这些图片并不能完整配套,所以业余游戏的画面往往显得单调或者搭配不协调(使用多个不属于一系列的图片资源).基于此,也有不少业余游戏采用“窃取”商业游戏图片于己用的方式(反正业余游戏一般都不用于商业目的),这种方法使用的就是一系列完整.配套的图片,画面就会显得专业.协调得多,但是,前提是能够破解商业游戏的图片格式.多数商业游戏并不会将图片资源以可以直接打开的常用格式存放,而是会做一定

图片加载原理

图片加载 是有 CPU GPU 联合协作的 CPU 是 用来计算 视图创建 视图frame 图片解码(将压缩的图片数据解码成未压缩的位图形式,为什么要压缩图片,因为图片数据太大,实际上不管是JPEG还是PNG 都是一种压缩的位图图形格式,只不过PNG 图片是无损压缩,并且支持alpha通道.而JPEG图片则是有损压缩,可以指定0 - 100%的压缩比.然而,将磁盘中图片渲染到屏幕之前,必须要得到图片的原始像素数据,才能让GPU渲染,GPU渲染流程 : 1.GPU获取图片的坐标 2.将坐标交给顶点

iOS 图片

一.图片加载的工作流 概括来说,从磁盘中加载一张图片,并将它显示到屏幕上,中间的主要工作流如下: 假设我们使用 +imageWithContentsOfFile: 方法从磁盘中加载一张图片,此时的图片并没有解压缩: 然后将生成的 UIImage 赋值给 UIImageView: 接着一个隐式的 CATransaction 捕获到了 UIImageView 图层树的变化: 在主线程的下一个 run loop 到来时,Core Animation 提交了这个隐式的 transaction,这个过程可

李洪强详细介绍SDWebImage

SDWebImage是一个开源的第三方库,它提供了UIImageView的一个分类,以支持从远程服务器下载并缓存图片的功能.它具有以下功能: 提供UIImageView的一个分类,以支持网络图片的加载与缓存管理 一个异步的图片加载器 一个异步的内存+磁盘图片缓存 支持GIF图片 支持WebP图片 后台图片解压缩处理 确保同一个URL的图片不被下载多次 确保虚假的URL不会被反复加载 确保下载及缓存时,主线程不被阻塞 从github上对SDWebImage使用情况就可以看出,SDWebImage在

SDWebImage源码学习笔记

//  这是我第二次学习sdwebimage源码,第一次学习吸收的很少,看不懂啊.第二次看个50%,在此记录一点笔记. 首先是目录: 1.SDWebImage目录 里面有两个类,SDWebImageCompat.h 里面有个根据屏幕设置图片scale的方法 SDWebImageOperation.h 声明了一个协议,取消操作 (可以理解这一个放的公共方法目录) 2.Downloader 目录(顾名思义,下载操作相关的目录)里面有两个关键的类 SDWebImageDownloaderOperati