精华内容
下载资源
问答
  • 文章目录一 __init__() 创建一个类文件对象二 append() 内存数据添加到zip对象三 appendfile() ...传统方法需要多次磁盘IO,性能很低,如果跳过文件存储,直接将内存的数据压缩保存,会大大减少磁盘IO,提升性能。 不

    工作中需要将大批的数据,压缩为zip存储。按照传统的处理办法需要将数据先存储到本地磁盘,再从磁盘读文件压缩成zip文件。
    传统方法需要多次磁盘IO,性能很低,如果跳过文件存储,直接将内存的数据压缩保存,会大大减少磁盘IO,提升性能。

    不需要看解析的,可以直接看最后完整的python代码

    创建一个类: InMemoryZIP(), 来处理所有的程序。

    class InMemoryZIP(object):
    

    init() 创建一个类文件对象

    	def __init__(self):
    		# create the in-memory file-like object
    		self.in_memory_zip = BytesIO()
    

    二 append() 内存数据添加到zip对象

    	def append(self, filename_in_zip, file_contents):
    		""" Appends a file with name filename_in_zip \
            and contents of file_contents to the in-memory zip.
            """
    
            # create a handle to the in-memory zip in append mode\
    		if not isinstance(file_contents, bytes):
    			file_contens = bytes(str(file_contens), encoding='utf-8')
    
    		# write the file to the in-memory zip
    		zf = zipfile.ZipFile(self.in_memory_zip, 'a', zipfile.ZIP_DEFLATED, False)
    
    		zf.writestr(filename_in_zip, file_contents)
    
    		# mark the files as having been created on Windows
            # so that Unix permissions are not inferred as 0000
    		for zfiel in zf.filelist:
    			zfile.create_system = 0
    
    		return self
    
    

    三 appendfile() 文件添加到zip对象

    	def appendfile(self, file_path, file_name=None):
    		""" Read a file with path file_path \
            and append to in-memory zip with name file_name.
            """
    
            # file_path is abs path
    		if file_name is None:
    			file_name = os.path.split(file_path)[1]
    
    
    		with open(file_path, 'rb') as f:
    			file_contents = f.read()
    			self.append(file_name, file_contents)
    
    		return self
    

    四 read() 读取zip数据流

    	def read(self):
    		""" Returns a string with the contents of the in-memory zip.
            """
    
    		self.in_memory_zip.seek(0)
    		return self.in_memory_zip.read()
    

    五 writetofile() 内存zip流保存为zip文件

    def writetofile(self, zip_filename):
    	"""
            Write the in-memory zip to a file
        """
    
    	with open(zip_filename, 'wb') as f:
    		f.write(self.read())
    
    

    六 完整版python代码

    # !user/bin/env python3
    # -*-coding : utf-8 -*-
    
    import zipfile
    from io import BytesIO
    import os
    
    
    class InMemoryZIP(object):
        def __init__(self):
            # create the in-memory file-like object
            self.in_memory_zip = BytesIO()
    
        def append(self, filename_in_zip, file_contents):
            """ Appends a file with name filename_in_zip \
            and contents of file_contents to the in-memory zip.
            """
            # create a handle to the in-memory zip in append mode\
            if not isinstance(file_contents, bytes):
                file_contents = bytes(str(file_contents), encoding='utf-8')
    
            zf = zipfile.ZipFile(self.in_memory_zip, 'a',
                                 zipfile.ZIP_DEFLATED, False)
    
            # write the file to the in-memory zip
            zf.writestr(filename_in_zip, file_contents)
    
            # mark the files as having been created on Windows
            # so that Unix permissions are not inferred as 0000
            for zfile in zf.filelist:
                zfile.create_system = 0
            return self
    
        def appendfile(self, file_path, file_name=None):
            """ Read a file with path file_path \
            and append to in-memory zip with name file_name.
            """
            if file_name is None:
                file_name = os.path.split(file_path)[1]
    
            f = open(file_path, 'rb')
            file_contents = f.read()
            self.append(file_name, file_contents)
            f.close()
            return self
    
        def read(self):
            """ Returns a string with the contents of the in-memory zip.
            """
            self.in_memory_zip.seek(0)
            return self.in_memory_zip.read()
    
        def writetofile(self, filename):
            """
            Write the in-memory zip to a file
            """
            f = open(filename, 'wb')
            f.write(self.read())
            f.close()
    
    
    if __name__ == '__main__':
    
    	pass
    
    	# contens = 'xxxxxxxxx'  # 内存数据
        # imz = InMemoryZIP()
        # imz.append('test.txt', contens)
        # imz.writetofile('test.zip')
       
    
    
    展开全文
  • 由于公司业务功能需求,需要从阿里云OSS(Object Storage Service,对象存储服务)中获取文件并打压缩成ZIP格式,在这次开发中使用了OSS文件下载相关服务,文件压缩功能使用的是commons-compress-x.x.jar中提供的...

    一,引言

    由于公司业务功能需求,需要从阿里云OSS(Object Storage Service,对象存储服务)中获取文件并打压缩成ZIP格式,在这次开发中使用了OSS文件下载相关服务,文件压缩功能使用的是commons-compress-x.x.jar中提供的功能。

    二,服务创建,jar包引入

    (1)jar包方式导入

    OSS jar包下载 : aliyun-sdk-oss-2.8.3.zip(百度网盘) /  OSS官方网站,下载java SDK开发包后,解压该压缩包,将解压后文件夹中的aliyun-sdk-oss-2.8.3.jar 以及lib文件夹中的所有文件导入到项目中(Eclipse:选中项目-->File-->Project Structure-->Modules-->Dependencies--> + -->JARs or directories --->将上述解压中所描述的所有jar,导入到 External Libraries中)

    (IDEA:选中项目-->File-->-->Project Structure --> Modules --Dependencies --> + --> JARs or directories--->将所需jar导入到External Libraries中)

    IDEA:

    1.项目---> File --> Project Structure

     2.Modules-->项目-->Dependencies--> + JARs or directories

    3.选择jar包

    压缩文件所需jar包: commons-compress-1.18.jar(百度网盘) / 官网

    (2)pom引入

    OSS:

        <!--oss-->
    	<dependency>
    		<groupId>com.aliyun.oss</groupId>
    		<artifactId>aliyun-sdk-oss</artifactId>
    		<version>2.8.3</version>
    	</dependency>

    commons-compress:(文件压缩)

    <!--文件压缩-->
    <!-- https://mvnrepository.com/artifact/org.apache.commons/commons-compress -->
    <dependency>
    	<groupId>org.apache.commons</groupId>
    	<artifactId>commons-compress</artifactId>
    	<version>1.14</version>
    </dependency>
    
    
    <!--操作文件所需-->
    <!-- https://mvnrepository.com/artifact/commons-io/commons-io -->
    <dependency>
    	<groupId>commons-io</groupId>
    	<artifactId>commons-io</artifactId>
    	<version>2.4</version>
    </dependency>

    三,代码实现

    本次我使用maven工程,使用springboot框架(自己测试时,挑自己喜欢的模式开发即可),引入springboot基本pom依赖和以上pom依赖,就可以开始开发了。

    package com.test.oss.osstest.Util;
    
    import com.aliyun.oss.OSSClient;
    import com.aliyun.oss.model.GetObjectRequest;
    import org.apache.commons.compress.archivers.ArchiveOutputStream;
    import org.apache.commons.compress.archivers.ArchiveStreamFactory;
    import org.apache.commons.compress.archivers.zip.ZipArchiveEntry;
    import org.apache.commons.compress.archivers.zip.ZipArchiveOutputStream;
    import org.apache.commons.io.FileUtils;
    import org.springframework.web.bind.annotation.RequestMapping;
    import org.springframework.web.bind.annotation.RestController;
    
    import java.io.File;
    import java.io.FileOutputStream;
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.List;
    
    /**
     * 将OSS文件下载到本地并打包成zip格式保存
     */
    @RestController
    public class FileOSSZIPUtil {
        /**
         * 从OSS服务中下载所需文件到本地临时文件
         * @param endponit oss对外服务的域名
         * @param accessKeyId 用户身份认证标识
         * @param accessKeySecret 用于加密签名字符串,oss用来验证签名字符串的秘钥
         * @param bucketName 要访问的存储空间
         * @param objectNames 要下载的对象/文件
         * @return
         */
        private static String downloadOSS(String endponit, String accessKeyId, String accessKeySecret, String bucketName, List<String> objectNames){
            String basePath="src/main/resources/files";
            OSSClient ossClient = null;
            try{
                //创建OSSClient实例,用于操作oss空间
                ossClient = new OSSClient(endponit, accessKeyId, accessKeySecret);
                for (String objectName:objectNames){
                    //指定文件保存路径
                    String filePath = basePath+"/"+objectName.substring(0,objectName.lastIndexOf("/"));
                    //判断文件目录是否存在,不存在则创建
                    File file = new File(filePath);
                    if (!file.exists()){
                        file.mkdirs();
                    }
                    //判断保存文件名是否加后缀
                    if (objectName.contains(".")){
                        //指定文件保存名称
                        filePath = filePath+"/"+objectName.substring(objectName.lastIndexOf("/")+1);
                    }
    
                    //获取OSS文件并保存到本地指定路径中,此文件路径一定要存在,若保存目录不存在则报错,若保存文件名已存在则覆盖本地文件
                    ossClient.getObject(new GetObjectRequest(bucketName,objectName),new File(filePath));
                }
            }catch (Exception e){
                System.out.println(e.getMessage());
                e.printStackTrace();
                throw new RuntimeException(e.getMessage());
            }finally {
                //关闭oss连接
                if (ossClient != null){
                    ossClient.shutdown();
                }
            }
            return basePath;
        }
    
        /**
         * 从OSS服务中下载所需文件到本地临时文件,并将文件以ZIP格式进行压缩
         * @param endpoint oss对外服务的域名
         * @param accessKeyId 用户身份认证标识
         * @param accessKeySecret 用于加密签名字符串,oss用来验证签名字符串的秘钥
         * @param bucketName 要访问的存储空间
         * @param objectNames 要下载的对象/文件
         * @param zipName zip文件名
         * @throws Exception
         */
        @RequestMapping("/oss_zip")
        public static void fileToZip(String endpoint,String accessKeyId,String accessKeySecret,String bucketName,List<String> objectNames,String zipName) throws Exception {
            File file = null;
            try{
                //调用方法货物OSS中的文件
                String fileName = downloadOSS(endpoint, accessKeyId, accessKeySecret, bucketName, objectNames);
                //获取待压缩文件源
                file = new File(fileName);
                //指定压缩文件存放路径
                String  zipFileName = "src/main/resources/zipFiles/"+zipName+".zip";
                File zipFile = new File(zipFileName);
                //构建输出流
                FileOutputStream fout = new FileOutputStream(zipFile);
                //构建压缩输出流
                ArchiveOutputStream aos = new ArchiveStreamFactory().createArchiveOutputStream(ArchiveStreamFactory.ZIP, fout);
                //判断获取的压缩实例是否为zip格式
                if (aos instanceof ZipArchiveOutputStream){
                    //进行压缩实例强转
                    ZipArchiveOutputStream zipos = (ZipArchiveOutputStream) aos;
    
                    //将指定文件封装成压缩项,添加到压缩流中
                    //判断文件是否存在
                    if (file.exists()){
                        //判断文件类型,调用文件处理方法
                        zipDir(zipos,file,"");
                    }
                }
                //关闭流
                aos.flush();
                aos.close();
            }catch (Exception e){
                System.out.println(e.getMessage());
                e.printStackTrace();
            }finally {
                //删除文件源,只保留zip文件
                if (file.exists()){
                    //判断文件类型
                    if(file.isDirectory()){
                        //对文件夹进行处理递归删除(有内容的文件夹不能直接被删除)
                        deleteFile(file);
                        file.delete();//删除空文件夹
                    }else {
                        file.delete();//文件直接删除
                    }
                }
            }
        }
    
        /**
         * 对压缩文件夹进行循环处理
         * @param zipos 压缩流
         * @param file 要处理的文件
         * @param baseDir 要处理的文件的文件夹路径
         * @throws IOException
         */
        private static void zipDir(ZipArchiveOutputStream zipos,File file,String baseDir) throws IOException {
            if (file.isDirectory()){
                File[] files = file.listFiles();
                for (File f:files){
                    //对文件进行递归判断
                    zipDir(zipos,f,baseDir+file.getName()+File.separator);
                }
            }else{
                //将文件封装成压缩项
                //根据文件创建zip内容实体
                ZipArchiveEntry zipArchiveEntry = new ZipArchiveEntry(file,baseDir+file.getName());
                //将根据文件创建的实体保存到压缩流中
                zipos.putArchiveEntry(zipArchiveEntry);
                //将内容输出到压缩文件中
                zipos.write(FileUtils.readFileToByteArray(file));
                zipos.closeArchiveEntry();
            }
        }
    
        /**
         * 文件及文件夹的递归删除
         * @param file
         */
        private static void deleteFile(File file){
            if (file.isDirectory()){
                File[] files = file.listFiles();
                for (File f: files){
                    deleteFile(f);
                    //将循环后的空文件夹删除
                    if(f.exists()){
                        f.delete();
                    }
                }
            }else{
                file.delete();
            }
        }
    
        public static void main(String[] args) {
            ArrayList<String> fileNames = new ArrayList<>();
            //oss的存储空间内部是扁平的,没有文件系统目录概念,所有的对象都隶属于其对应的存储空间,在下载是必须明确的指出要下在的文件,指定其上层(文件系统概念)文件夹,无法下载其内部文件
            //fileNames.add("image1/"); //WARN com.aliyun.oss - Cannot read object content stream: src\main\resources\files\image1 (拒绝访问。)
            fileNames.add("image1/image2/2.jpg");
            fileNames.add("image1/image2/3.jpg");
            fileNames.add("image1/0.jpg");
            try {
                //此连接OSS资源为本人OSS服务资源,可供学习人员进行下载测试,请勿做它用
                fileToZip("http://oss-cn-qingdao.aliyuncs.com","LTAIUkHILUDTpU5y","PNNHBr28k1xBjOMxzdKBzsvdIjsnWB","first-test-syy",fileNames,"testImage");
            } catch (Exception e) {
                e.printStackTrace();
            }
        }
    
    }
    

    补充:java - OSS下载文件方式(下载到本地 , 流式下载) 更多:官网

    package com.test.oss.osstest.Util;
    
    import com.aliyun.oss.OSSClient;
    import com.aliyun.oss.model.GetObjectRequest;
    import com.aliyun.oss.model.OSSObject;
    
    import java.io.*;
    
    /**
     * 将oss服务器中的文件下载到本地文件中
     */
    public class FileOSSUtil {
        /**
         * 下载文件到本地
         * @param endpoint
         * @param asseccKeyId
         * @param asseccKeySecret
         * @param bucketName
         * @param objectName
         */
        public static void ossToLocal(String endpoint,String asseccKeyId,String asseccKeySecret,String bucketName,String objectName){
            //构建OSSClient实例,用来操作OSS
            OSSClient ossClient = new OSSClient(endpoint, asseccKeyId, asseccKeySecret);
    
            //下载OSS文件到本地
            ossClient.getObject(new GetObjectRequest(bucketName,objectName),new File("g:/a.zip"));
    
            //关闭连接
            ossClient.shutdown();
        }
    
        /**
         * OSS流式下载,当下载文件过大或一次性下载耗时过长,可以选择流式下载,
         * 一次只处理部分内容,直到文件下载完成
         * @param endpoint
         * @param asseccKeyId
         * @param asseccKeySecret
         * @param bucketName
         * @param objectName
         */
        public static  void ossToStream(String endpoint,String asseccKeyId,String asseccKeySecret,String bucketName,String objectName) throws IOException {
            //创建OSSClient
            OSSClient ossClient = new OSSClient(endpoint, asseccKeyId, asseccKeySecret);
    
            //调用ossClient.getObject(bucketName,objectName)方法获取文件对象(OSSObject),其中包含存储空间名称,文件名称,文件元信息及一个输入流
            OSSObject ossobject = ossClient.getObject(bucketName, objectName);
            //ossobject.getKey();//对象(文件)名
    
            //获取ossobject中的输入流,读取文件内容
            InputStream ois = ossobject.getObjectContent();
            BufferedReader reader = new BufferedReader(new InputStreamReader(ois));
            while (true) {
                String line = reader.readLine();
                if (line == null) break;
                System.out.println("\n" + line);
            }
            // 数据读取完成后,获取的流必须关闭,否则会造成连接泄漏,导致请求无连接可用,程序无法正常工作。
            reader.close();
            // 关闭OSSClient。
            ossClient.shutdown();
        }
    
        public static void main(String[] args) throws IOException {
    
            //ossToLocal("http://oss-cn-qingdao.aliyuncs.com","LTAIUkHILUDTpU5y","PNNHBr28k1xBjOMxzdKBzsvdIjsnWB","first-test-syy","test/syy/random_awards.zip");
            ossToStream("http://oss-cn-qingdao.aliyuncs.com","LTAIUkHILUDTpU5y","PNNHBr28k1xBjOMxzdKBzsvdIjsnWB","first-test-syy","test/test.txt");
    
        }
    }
    

    字段简介:

    bucketName:存储空间(Bucket)名称,存储空间是用于存储对象(文件)的容器,所有的对象(文件)都必须隶属于某个存储空间。

    objectName: 下载的对象(文件)名,对象(Object/文件)是OSS存储数据的基本单元,也成为OSS的文件,对象有元信息(Object Meta),用户数据 和 文件名(Key)组成,对象由存储空间内部唯一的key(文件名)来标识。

    endpoint:Endpoint 是OSS对外服务的访问域名

    AccessKey: 访问秘钥,accessKeyId 和 accessKeySecret用来连接OSS时做身份验证

    了解更多详细简介:OSS官方文档

    最后献上代码一份下载后可直接使用测试(所写测试方法均在所在类的main方法中):oss-test

    本次使用总结完毕,更多内容且看下次总结。

    展开全文
  • 项目不难,就是异步压缩选择的图片并保存到本地文件的功能,方法也挺简单的,移植出来就是为了以后集成快速方便。 工程目录如上,压缩的功能主要在ImageUtils和UriImage这两个类里面,MediaFile是一个判断文件的...

    今天移植了一个图片压缩保存到本地文件的demo,希望有帮到有需要的同学。

    项目不难,就是异步压缩选择的图片并保存到本地文件的功能,方法也挺简单的,移植出来就是为了以后集成快速方便。


    工程目录如上,压缩的功能主要在ImageUtils和UriImage这两个类里面,MediaFile是一个判断文件的工具类,防止选择了非图片的文件。

    在ImageUtils类中可以设置压缩后的最大宽、高和文件大小
    程序运行后示例


    其他不多说了,自己看代码吧~在这吐槽下微信和微博的图片压缩好叼..那个压缩效果还是很难达到的~而经常又被他们比较 - - 这就坑爹了。。

    下载地址: http://download.csdn.net/detail/fly_o0o/6968273


    展开全文
  • 所以设计到文件压缩保存与清空删除操作。在这里记下笔记。 /** * 压缩并另存为,每次先清空再保存 */ private void compressFile(){ //清空保存目录下的旧照片 String saveDir = Environment....

    这两天改进优化项目中图片上传的代码,考虑到可能有7、8M的比较大的图片,因为要先进行压缩。所以设计到文件的压缩,保存与清空删除操作。在这里记下笔记。

    /**
    	 * 压缩并另存为,每次先清空再保存 
    	 */
    	private void compressFile(){
    		//清空保存目录下的旧照片
    		String saveDir = Environment.getExternalStorageDirectory()
    				+ "/bag/uploadPictures";
    		File imageDir = new File(saveDir);
    		if (imageDir.exists()) {
    			clearFolder(imageDir);
    		}else{
    			imageDir.mkdirs();
    		}
    		//判断图片大小,大于300k则压缩
    		for (int i = 0; i < imagePathList.size(); i++) {
    			Bitmap bitmap = compressImage(imagePathList.get(i));
    			imagePathList.set(i, saveImage(saveDir,bitmap));
    		}
    	}
    	
    	/**保存图片,输入保存目录和bitmap,以日期命名,返回保存路径
    	 * 
    	 * @param path
    	 * @param bitmap
    	 * @return
    	 */
    	private String saveImage(String path ,Bitmap bitmap){
    		  Date dt = new Date();     
    		  SimpleDateFormat sdf = new SimpleDateFormat("yyyyMMddHHmmssSSS");   
    		  String imageName =sdf.format(dt)+".jpg";   
    		   
    		File file = new File(path,imageName );
    		  if (file.exists()) {
    			  file.delete();
    		  }
    		  try {
    		   FileOutputStream out = new FileOutputStream(file);
    		   bitmap.compress(Bitmap.CompressFormat.JPEG, 100, out);
    		   out.flush();
    		   out.close();
    		   Log.d(TAG, "图片已经保存");
    		   return path+"/"+imageName;
    		  } catch (FileNotFoundException e) {
    			  Log.d(TAG, "文件不存在");
    		     e.printStackTrace();
    		     return "";
    		  } catch (IOException e) {
    			  Log.d(TAG, "IO异常"+e.toString());
    		   e.printStackTrace();
    		   return "";
    		  }
    	}
    	
    	/**
    	 * 压缩图片
    	 * @param imagePath
    	 * @return
    	 */
    	private Bitmap compressImage(String imagePath) {
    		PhotoUpBitmapCache bitmapCache = new PhotoUpBitmapCache();
    		//取1280*720大小
    		Bitmap image = bitmapCache.revitionImage(imagePath, 1280,720);
    		//用下面这个行代码会造成OOM,所以必须用Android 自带的方法去先压缩再导入
    //		Bitmap image = BitmapFactory.decodeFile(imagePath);
    		ByteArrayOutputStream baos = new ByteArrayOutputStream();
    		image.compress(Bitmap.CompressFormat.JPEG, 100, baos);//质量压缩方法,这里100表示不压缩,把压缩后的数据存放到baos中
    		int options = 100;
    		while ( baos.toByteArray().length /1024 > 300) {	//循环判断如果压缩后图片是否大于100kb,大于继续压缩		
    			baos.reset();//重置baos即清空baos
    			image.compress(Bitmap.CompressFormat.JPEG, options, baos);//这里压缩options%,把压缩后的数据存放到baos中
    			options -= 5;//每次都减少5%
    		}
    		ByteArrayInputStream isBm = new ByteArrayInputStream(baos.toByteArray());//把压缩后的数据baos存放到ByteArrayInputStream中
    		Bitmap bitmap = BitmapFactory.decodeStream(isBm, null, null);//把ByteArrayInputStream数据生成图片
    		 Log.d(TAG, "文件压缩成功");
    		return bitmap;
    	}
    	
    	/**
    	 * 清空文件夹里面所有子文件
    	 */
        private void clearFolder(File file) {   
      
            if(file.isDirectory()){  
                File[] childFiles = file.listFiles();  
                if (childFiles == null || childFiles.length == 0) {  
                
                    return;  
                }  
          
                for (int i = 0; i < childFiles.length; i++) {  
                    childFiles[i].delete();  
                }  
               
                return ;
            }  
        } 


    展开全文
  • Android拍照压缩裁剪并保存图片

    千次阅读 2013-11-21 00:57:31
    在实际项目开发中,有时会遇到拍照,对照片进行剪切,压缩保存等一些功能,别的不扯,代码上: package com.example.cameratest; import java.io.ByteArrayInputStream; import java.io.ByteArrayOutputStream; ...
  • 通过Python自动压缩文件并发送邮件

    千次阅读 2019-01-20 10:08:09
    前言:因为每次更新好日报程序都要把最新版本发给同事,所以萌生了做个程序自动合并文件——压缩文件——发送邮件——删除文件,其中压缩文件用了网上比较好用的轮子,删除文件夹和文件夹下的所有内容用了shutil....
  • iOS用ZipArchive文件解压缩、压缩文件
  • 压缩文件压缩文件大家肯定都不陌生,别跟我说你没用见过压缩文件。在我们windows当中压缩文件可以说非常常见的一种文件格式,我们在下载软件、资料、安装包一般来说都是压缩文件的格式。那在我们linux系统当中有哪...
  • Android拍照并保存(对图片进行压缩,分解)

    千次阅读 多人点赞 2014-11-06 17:07:22
    项目中摘出来的一个小功能模块,有需要的朋友可以借鉴下。...2.将图片分解,压缩,显示 3.写入SDCard卡保存 具体实现: 1.定义布局文件 2.编写业务代码 这里只对调用相机拍照、图片显示、保存 做介绍
  • 前言:  JsZip客户端压缩客户选择的文件上传。...客户端压缩文件测试&lt;/title&gt; &lt;script src="./jquery.min.js" &gt;&lt;/script&gt; &lt;script src="./jszip
  • 需求:服务器指定图片尺寸大小,并且限制图片文件大小,因此在选择图片后需要进行操作 保存图片的时候,会发现实际文件大小大于当前设置的大小,这个问题在最后面解决;
  • 今天使用libjpeg-turbo压缩图片后再显示时图片方向变了,原图时纵向的图,压缩后再加载变成横向的了,最主要的原因是压缩后的图片文件没有了EXIF信息 有可能是我调用libjpeg-turbo的c文件代码问题,但是我对c是毛都...
  • 首先介绍项目的整体思路:哈夫曼编码压缩文件实际就是统计出文件中各个字符出现的频率,然后为每个字符生成对应的编码,然后将每个字符用哈夫曼编码的形式按字节保存压缩文件中。而文件的解压缩实际上就是将压缩...
  • Qt怎么实现解压缩和压缩文件的功能t怎么实现解压缩和压缩文件的功能,不想调用本地的rar指令。第三方库Quezip稳定吗,在哪里可以找到比较全的源码。
  • bitmap 质量压缩并保存到本地

    千次阅读 2018-10-19 16:37:51
    * 质量压缩方法 * * @param image * @return */ public static Bitmap compressImage(Bitmap image) { ByteArrayOutputStream baos = new ByteArrayOutputStream(); image.compress(Bitmap.CompressFormat.JPEG, ...
  • java生成压缩文件

    万次阅读 2013-07-29 21:15:35
    在工作过程中,需要将一个文件夹生成压缩文件,然后提供给用户下载。所以自己写了一个压缩文件的工具类。该工具类支持单个文件和文件夹压缩。放代码: import java.io.BufferedOutputStream; import java.io.File...
  • 压缩文件格式

    千次阅读 2013-03-11 15:48:35
    压缩文件格式有哪些,主要有:rar,zip,tar,cab,uue,jar,iso,z,7-zip,ace,lzh,arj,gzip,bz2等压缩文件。 经过压缩软件压缩的文件叫压缩文件,压缩的原理是把文件的二进制代码压缩,把相邻的0,1代码减少,比如有000000,...
  • POI导出多个Excel文件,生成压缩文件

    千次阅读 2018-01-15 10:51:38
    众所周知,每个Excel文件最多可以存储255个sheet。当需要导出的sheet数超过255个时,比较好的办法是将多个Excel文件压缩成.zip文件再导出 步骤:1 将需要导出的... 3 将Excel文件生成压缩文件导出 package com.
  • Java中的Zip进行多文件保存

    千次阅读 2017-09-22 14:01:32
    Java中的Zip进行多文件的保存的Demo-包含压缩文件的生成和读取
  • 1、压缩文件到内存字节,不需要存储本地。 2、压缩文件存储到本地目录 import lombok.extern.slf4j.Slf4j; import org.apache.commons.io.IOUtils; import java.io.*; import java.util.ArrayList; import java....
  • cmd下压缩文件

    万次阅读 2018-03-08 14:35:51
    由于cmd不支持压缩命令,...将D盘下的XXX.txt文件压缩为XXX.rar文件并保存在D盘下。1.压缩后删除源文件:输入命令:rar a -r -ep1 -df "D:\hello.rar" "D:\hello.txt" 2.压缩后保留源文件:输...
  • Unity3D压缩和解压缩文件

    千次阅读 2013-08-21 14:31:09
    今天试了试,在Unity不能用C# IO类里的压缩和解压缩,看了论坛里的一些讨论,就想着能不能用第三方的压缩和解压缩动态库。 于是乎就下了一个Ionic.Zip.dll。然后,然后就没有然后了。 Compression类: using ...
  • C#Zip方式压缩文件和解压缩文件代码

    千次阅读 2012-05-11 18:18:30
    压缩和解压缩分为:单一文件压缩和整个文件夹压缩,其中文件夹压缩现在还没实现递归文件夹,现已够用测试通过,代码如下: using System; using System.Collections.Generic; using System.Linq; using System....
  • Java使用winrar压缩和解压缩文件

    千次阅读 2017-10-18 14:17:32
    Java使用winrar压缩和解压缩文件 2015-08-17| 发布: | 浏览: 740 |保存PDF Winrar可以使用命令行进行压缩和解压缩,如: 将D:/aa.doc 压缩为:aa.rar d:/winrar/rar a d:/aa.rar d:/aa.doc 将aa....
  • C++ 读取raw文件并保存为到bmp图片下

    千次阅读 2017-10-15 17:01:24
    上篇文章,写了如何读取光谱图片raw,本文就解决,如何把保存的像素值保存为BMP图片格式。  关于bmp文件格式,网上有很多,不再赘述。我们需要做的只是修改相关信息头,然后填充数据就可以了,本代码实现的是24真...
  • 前言 前端使用 from 表单以 POST 方式提交文件,php 进行处理后存储文件到指定目录。 目录
  • 现在手机拍照照片都很多 3~10M很正常,如果要上传到后台那么需要压缩一下,下面利用Glide来压缩 //图片框架 https://github.com/bumptech/glide implementation 'com.github.bumptech.glide:glide:4.8.0' ...
  • java实现多文件上传并保存到数据库

    千次阅读 2018-07-25 15:57:43
    好久没有写博客了,今天项目里需要一个功能,即前台实现多图片上传列表,后台保存到mysql中。前台后台一起弄,用了半天时间终于搞定了。 实现:前台Layui实现;后台servlet+hibernate 不多废话,先上图 ...
  • 如何用java代码实现压缩文件的读取? 例如从银行服务器上下载对账文件后,为了不在本地保存文件。 压缩文件中的文件格式是俩个文本文件,怎么用流的方式读取到压缩文件中的文件内容。

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 378,648
精华内容 151,459
关键字:

如何压缩文件并保存