精华内容
下载资源
问答
  • 这是我用Eclipse写,仿zip压缩软件的java代码,自己写的代码,压缩和解压缩的代码都有,文件分割都有,还有进度条(线程),包括Frame界面。可以运行。这个可以当作学习参考资料来用。
  • 数据压缩软件代码

    2013-11-19 19:44:15
    这是数据压缩软件的代码,就是压缩数据算法
  • 压缩代码以适应受到成本或空间限制存储子系统已经成为嵌入式系统开发一项重要事务。ARM、MIPS、IBM以及ARC都提供了降低存储器占用技术,本文将对这几种架构中代码压缩技术实现进行比较分析。
  • LZW解压缩软件代码

    2019-02-15 20:19:37
    完整LZW解压缩软件的代码; 软件环境:Qt5,Win10 64bit,MinGW 7.3; 功能:文本(ASCII)压缩、256色图像压缩(此功能还有一些问题); 特点:现代GUI,多线程操作,不支持中文路径和包含空格文件名。
  • 这是一个经典的压缩软件代码,功能很强,很实用,是一个通用压缩软件。看懂它对你的VC学习很有帮助。
  • 压缩代码以适应受到成本或空间限制存储子系统已经成为嵌入式系统开发一项重要事务。ARM、MIPS、IBM以及ARC都提供了降低存储器占用技术,本文将对这几种架构中代码压缩技术实现进行比较分析。  如今,存储...
  • 现有的JS代码压缩工具都是网页版的,例如ESC,shrinksafe等,他们都是在网页上用js本身实现对代码的压缩。由于网页的局限性,很难很好的管理压缩任务。聚问网络开发的js压缩专家(JsPacker)v1.0 是同功能的桌面程序,...
  • 7zip 压缩软件代码

    2010-04-07 22:01:53
    7Zip 压缩软件代码,开源代码。需要请尽情下载
  • 前言项目中大量用到图片加载,由于图片太大,加载速度很慢,因此需要对文件进行统一压缩一:导入包from PIL import Imageimport os二:获取图片文件大小def get_size(file):# 获取文件大小:KBsize = os.path.get...

    前言

    项目中大量用到图片加载,由于图片太大,加载速度很慢,因此需要对文件进行统一压缩

    一:导入包

    from PIL import Image

    import os

    二:获取图片文件的大小

    def get_size(file):

    # 获取文件大小:KB

    size = os.path.getsize(file)

    return size / 1024

    三:拼接输出文件地址

    def get_outfile(infile, outfile):

    if outfile:

    return outfile

    dir, suffix = os.path.splitext(infile)

    outfile = '{}-out{}'.format(dir, suffix)

    return outfile

    四:压缩文件到指定大小,我期望的是150KB,step和quality可以修改到最合适的数值

    def compress_image(infile, outfile='', mb=150, step=10, quality=80):

    """不改变图片尺寸压缩到指定大小

    :param infile: 压缩源文件

    :param outfile: 压缩文件保存地址

    :param mb: 压缩目标,KB

    :param step: 每次调整的压缩比率

    :param quality: 初始压缩比率

    :return: 压缩文件地址,压缩文件大小

    """

    o_size = get_size(infile)

    if o_size <= mb:

    return infile

    outfile = get_outfile(infile, outfile)

    while o_size > mb:

    im = Image.open(infile)

    im.save(outfile, quality=quality)

    if quality - step < 0:

    break

    quality -= step

    o_size = get_size(outfile)

    return outfile, get_size(outfile)

    五:修改图片尺寸,如果同时有修改尺寸和大小的需要,可以先修改尺寸,再压缩大小

    def resize_image(infile, outfile='', x_s=1376):

    """修改图片尺寸

    :param infile: 图片源文件

    :param outfile: 重设尺寸文件保存地址

    :param x_s: 设置的宽度

    :return:

    """

    im = Image.open(infile)

    x, y = im.size

    y_s = int(y * x_s / x)

    out = im.resize((x_s, y_s), Image.ANTIALIAS)

    outfile = get_outfile(infile, outfile)

    out.save(outfile)

    if __name__ == '__main__':

    compress_image(r'D:\learn\space.jpg')

    resize_image(r'D:\learn\space.jpg')

    以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持我们。

    本文标题: python实现图片压缩代码实例

    本文地址: http://www.cppcns.com/jiaoben/python/268309.html

    展开全文
  • 7z压缩软件、7zip压缩程序,C 源代码,7z压缩软件在国内慢慢流行,这是最初C 源代码,仅供参考。
  • https://blog.csdn.net/immortal_mcl压缩代码:void CRobotAppView::OnTimer(UINT_PTR nIDEvent){// TODO: 在此添加消息处理程序代码和/或调用默认值if(m_timer)//如果上一次定时器程序已经运行完,才执行下面...

    https://blog.csdn.net/immortal_mcl


    压缩代码:
    void CRobotAppView::OnTimer(UINT_PTR nIDEvent)
    {
    // TODO: 在此添加消息处理程序代码和/或调用默认值

    if(m_timer)//如果上一次的定时器程序已经运行完,才执行下面的代码
    {
    m_timer=FALSE;//本次定时,正在运行,未结束前,不得进行下次运行
    CView* pView;
    CMDIFrameWnd *pFrame = (CMDIFrameWnd*)AfxGetApp()->GetMainWnd();
      CMDIChildWnd *pChild = (CMDIChildWnd*)pFrame->GetActiveFrame();
      pView = (CRobotAppView*)pChild->GetActiveView();
    CRect rc;
    pView->GetWindowRect(rc);
             CDC * pClientDC =pView->GetDC();
    CDC  memDC;//定义一个内存画布
    memDC.CreateCompatibleDC(pClientDC);//创建一个兼容的画布
    CBitmap bmp;
    bmp.CreateCompatibleBitmap(pClientDC,rc.Width(),rc.Height());//创建兼容位图
    memDC.SelectObject(&bmp);//选中位图对象
    BITMAP bitmap;
    bmp.GetBitmap(&bitmap);
    CDC* pDeskDC =GetDesktopWindow()->GetDC();//获取桌面画布对象  获取桌面窗口上下文环境的指针(句柄)

    memDC.BitBlt(0,0,bitmap.bmWidth,bitmap.bmHeight,pDeskDC,rc.left,rc.top,SRCCOPY);

    DWORD size=bitmap.bmWidthBytes * bitmap.bmHeight;//屏幕图像的总像素数
    lpData = new BYTE[size];
    int panelsize  = 0; //记录调色板大小
    if(bitmap.bmBitsPixel<16)//判断是否为真彩色位图
    panelsize = (int)pow((float)2,(int)(bitmap.bmBitsPixel*sizeof(RGBQUAD)));
    //填充BITMAPFILEHEADER
    BITMAPFILEHEADER bitmapFileHeader;
    memset(&bitmapFileHeader,0,sizeof(BITMAPFILEHEADER));
    bitmapFileHeader.bfSize = sizeof(BITMAPFILEHEADER);
    bitmapFileHeader.bfType = 0x4d42; //BM

    bitmapFileHeader.bfOffBits =sizeof(BITMAPFILEHEADER) + sizeof(BITMAPINFOHEADER);


    BITMAPINFOHEADER *pBInfo = new BITMAPINFOHEADER;//定义位图信息头结构体
    //初始化位图信息头
    pBInfo->biBitCount       = bitmap.bmBitsPixel;
    pBInfo->biClrImportant   = 0;
    pBInfo->biCompression    = 0;
    pBInfo->biHeight         = bitmap.bmHeight;
    pBInfo->biPlanes         = bitmap.bmPlanes;
    pBInfo->biSize           = sizeof(BITMAPINFOHEADER);
    pBInfo->biSizeImage      = bitmap.bmWidthBytes*bitmap.bmHeight;
    pBInfo->biWidth          = bitmap.bmWidth;
    pBInfo->biXPelsPerMeter  = 0;
    pBInfo->biYPelsPerMeter  = 0;
    BITMAPINFO bInfo;//定义位图信息结构体
    bInfo.bmiHeader = *pBInfo;//初始化

    GetDIBits(memDC.m_hDC,bmp,0, pBInfo->biHeight,lpData,&bInfo,DIB_RGB_COLORS);// 获取屏幕位图的DIB数据(生成avi需要),保存到lpdata


    if(nFrames == 0)//如果是第一帧
    {
    AVISTREAMINFO strhdr;//视频数据流结构
    AVIFileOpen(&pfile,m_VedioName,OF_WRITE | OF_CREATE,NULL);//打开或创建AVI文件
    /初始化AVI视频流信息结构体
    memset(&strhdr, 0, sizeof(strhdr));//初始化信息头为0
    strhdr.fccType    = streamtypeVIDEO;
    strhdr.fccHandler = mmioStringToFOURCC(_T("MSVC"), 0);  
    strhdr.dwScale    = 1;
    strhdr.dwRate     = m_VedioFrame;
    strhdr.dwSuggestedBufferSize = pBInfo->biSizeImage;
    SetRect(&strhdr.rcFrame,0,0,pBInfo->biWidth,pBInfo->biHeight);
    AVIFileCreateStream(pfile,&pS,&strhdr);//创建AVI文件流

    //设置压缩选项,创建压缩流 
    AVICOMPRESSOPTIONS pCompressOption;   
    AVICOMPRESSOPTIONS* opts[1] = {&pCompressOption}; 
    memset(&pCompressOption,0,sizeof(pCompressOption));
    opts[0]->fccType = streamtypeVIDEO;
    opts[0]->fccHandler = mmioStringToFOURCC(_T("MSVC"), 0);
    opts[0]->dwQuality = 10000;//original :7500
    opts[0]->dwBytesPerSecond = 1000;//original :0
    opts[0]->dwFlags = AVICOMPRESSF_VALID || AVICOMPRESSF_KEYFRAMES;
    opts[0]->lpFormat = 0;
    opts[0]->cbFormat = 0;
    AVIMakeCompressedStream(&pComStream,pS,&pCompressOption,NULL); 
    AVIStreamSetFormat(pComStream,0,pBInfo,sizeof(BITMAPINFOHEADER));
    }
    AVIStreamWrite(pComStream,nFrames ,1,(LPBYTE)lpData,pBInfo->biSizeImage,AVIIF_KEYFRAME,NULL,NULL);//将桌面图像数据写入文件
    nFrames++;//增加一帧
    delete []lpData;//释放内存
    delete pBInfo ; //释放内存
    ReleaseDC(pClientDC);
    ReleaseDC(pDeskDC);
    ReleaseDC(&memDC);
    m_timer=TRUE;//定时器程序可以继续响应

    }
    CBaseView::OnTimer(nIDEvent);
    }

    展开全文
  • 基于C语言文件压缩软件,采用霍夫曼编码~可压缩文本、word文档、图片、pdf、ppt。若文件重复率不高,压缩效果则不太明显
  • 代码学习0:参考软件的使用视频压缩编码标准参考软件获取参考软件的使用参考软件使用方法VTM工程cfg配置文件工程命令设置编码器解码器工程运行编码器解码器结果输出编码端解码端 之前对视频压缩编码学习主要停留在...

    视频压缩编码参考软件代码入门

    代码学习0:参考软件的使用



    之前对视频压缩编码的学习主要停留在原理文本的学习上,18年9月份新学期才开始尝试深入一点了解代码。第一次面临这么大工程量的代码框架,虽然只是想对其进行一个小小的优化,但是在不了解其他部分框架的时候,盲目改代码就会出错,可能造成编解码不一致等情况。因此趁寒假快到,空出一点时间回炉重造,希望从菜鸟初级入门能够更系统地学习并整理下~

    参考软件:VTM3.0

    (参考 “岳麓吹雪”大佬博客《HEVC代码学习0:HM使用+码流分析教程》:https://blog.csdn.net/lin453701006/article/details/52775820)

    视频压缩编码标准

    自上世纪80年代以来,人类一直在研究视频的编解码方法,并制定了相应的国际化标准和准则,视频编码标准规范了压缩后视频码流的格式以及解码器,使得不同设备编码后的码流能够在不同设备上正常解码播放,保证各种编解码设备和软件的互通性。目前国际上制定编解码标准的两大组织分别是:

    • 国际电信联盟电信标准化部门ITU-T(International Telecommunication Union-Telecommunication Standardization Sector);
    • 国际标准组织/国际电工委员会ISO/IEC(International Organization for Standardization/International Electro technical Commission);

    在过去的时间里,前者的视频编码专家组VCEG(Video Coding Experts)推出了H.26X系列。后者由其动态图像专家组MPEG(Moving Picture Experts Group)推出了MPEG系列视频编码标准。在2003年,两者联合推出了H.264/AVC视频标准,目前还在广泛使用。随着时间发展,2013年,两者推出最新的国际视频标准H.265,即HEVC标准。

    2015年10月,VCEG和MPEG成立JVET工作组Joint Video Exploration Team,该工作组的任务是制定下一代视频编码标准。2018年4月,JVET正式命名下一代视频编码标准为多功能视频编码(Versatile Video Coding,VVC),其相应的测试模型为VTM。目前VVC标准还在制定过程中。

    参考软件获取

    目前VTM的获取方式:
    https://vcgit.hhi.fraunhofer.de/jvet/VVCSoftware_VTM
    可以通过git下载。

    补充一下HEVC的参考软件HM的获取方式:
    https://hevc.hhi.fraunhofer.de/svn/svn_HEVCSoftware/
    分成三个大类:
    trunk:主干程序,是最新的HM主线版本。
    branches:分支程序,是扩展的HM版本。
    tags:各个版本的HM版本。
    可以通过TortoiseSVN下载:
    在这里插入图片描述

    参考软件的使用

    对于HM软件,通过TortoiseSVN下载后,可以直接进入下载目录./build,打开.sln文件即可打开工程。
    在这里插入图片描述

    但是对于VTM需要先安装cmake进行编译:
    第一步:在下载目录下新建空文件夹: mkdir build
    第二步:打开cmake文件,选择source code路径和build路径;
    第三步:点击"configure",当出现"configure done"证明编译成功;
    在这里插入图片描述
    第四步:点击"Generate",生成.sln文件;
    第五步:可以直接点击"Open Project",也可以同上述HM一样,直接进入build目录下打开.sln文件。
    以上上述编译过程结束后才能打开VTM项目。

    参考软件使用方法

    VTM工程

    VTM工程的文件组织结构:

    • build文件:包含VTM的工程文件NextSoftware.sln;
    • cfg文件:里面是关于VTM编码配置文件.cfg,可以直接用文本工具打开编辑;
    • source文件:是VTM的c++源文件,包含编码器和解码器的源文件;
    • bin文件:包含VTM工程的编译结果,EncoderApp.exe和DecoderApp.exe等等;
      目前VTM3.0包含以下13个工程。
      在这里插入图片描述
      其中比较重要的:
    • DecoderAnalyserApp:
    • DecoderApp: 解码器的应用函数
    • EncoderApp: 编码器的应用函数
    • CommonLib: 编码器和解码器公用的库函数
    • DecoderLib: 解码器的库函数
    • EncoderLib: 编码器的库函数

    cfg配置文件

    cfg文件的参数需要进行配置,其中包括VTM工程本身的参数配置和测试序列的参数配置两个文件,均在./cfg目录下。
    在这里插入图片描述

    • VTM工程参数配置:
      如上图,工程配置文件分为4种:encoder_intra_vtm.cfg(即All_intra,全帧内预测模式),encoder_lowdelay_P_vtm.cfg,encoder_lowdelay_vtm.cfg,encoder_randomaccess_vtm.cfg。
      其中参数如QP,对工具如deblocking、SAO的开关等等都在配置文件中,以及编码端的码流文件、重构yuv文件名称都可以控制;
      在这里插入图片描述
    • 测试序列参数配置:
      在路径./cfg/per-sequence中,有标准测试条件下测试序列的配置。
      如下图,参数分别是序列名称、比特深度、亮度色度模式、帧率、从第几帧开始编码、序列图像宽度、序列图像高、共编码多少帧。
      其中如果更换其他序列,必要修改的是序列名称以及宽度高度,具体要开始编码多少帧根据需求进行设定。
      在这里插入图片描述

    工程命令设置

    编码器

    打开属性页,填写命令参数和工作目录:
    命令参数格式:“-c 两个cfg配置文件” + “>> 日志txt文件”
    如-c encoder_intra_vtm_qp32.cfg -c SlideEditing.cfg >> log_file.txt
    其中 >> 是不覆盖写,> 是覆盖写。
    而工作目录是在./bin目录下的子目录,具体需要根据选择的调试器是Debug或者Release,即编译后生成的EncoderApp.exe所在目录。
    在这里插入图片描述

    解码器

    打开属性页,填写命令参数和工作目录:
    其中解码端的命令参数和编码端的不同,不再有配置文件,而是根据编码器生成的码流文件生成重构yuv。
    命令格式为"-b 码流文件” + “-o 解码输出重构文件” + “>> 解码器日志文件”
    如,-b str.bin -o res_decoder.yuv >> log_decoder.txt
    在这里插入图片描述

    工程运行

    编码器

    • 将编码器"EncoderApp"设置为启动项目,直接开始运行即可。
      在这里插入图片描述
      最后编码器的性能结果会被记录在命令参数的日志文件中,生成的码流文件和重建视频文件是在参数配置cfg文件内设置的,路径即编码器自己设置的工作目录下。

    解码器

    • 将解码器“DecoderApp”设置为启动项目,直接开始运行。
      最后解码器的解码性能结果会被记录在命令参数的日志文件中,-o生成的重构视频文件,都在解码器设置的工作目录下。

    结果输出

    编码端

    在参考软件中,一般的信息都已经被打印在日志文件中,包括一些工具的开关状态、编码结果,以及全部的编码时间。
    在这里插入图片描述

    每编完一帧后输出的的编码信息,其中重要的是:POC(对应图像时域播放顺序的序号,这里POC 0 就是时域播放第一帧)、TId(temporal id 时域层序号,一个帧只能参考时域层低于他的帧,不能参考更高层的帧),总比特数,YUV各自的PSNR值。

    展开全文
  • 压缩软件代码

    2008-07-04 23:34:44
    有问题可和我联系,愿和所有喜欢编程同志做朋友 QQ:520136718
  • 压缩软件UNZIPC源程序代码unzip
  • 基于四叉树的图像压缩算法源代码,对于非真彩色图像压缩效率较好,真彩色图像压缩效率不高,浅显易懂,便于修改,方便完善真彩色图片的压缩效率
  • Python代码实现压缩软件

    千次阅读 2019-12-29 22:44:10
    写在前面话 诗经有云:五月斯螽动股,六月莎鸡振羽,七月在野,八月在宇,九月在户,十月蟋蟀入我床下。十一月有点凉,十二月被窝到不了地方都是远方。这句话意思就是:五月蚱蜢弹腿跳,六月纺织娘振翅,七...

    写在前面的话

           诗经有云:五月斯螽动股,六月莎鸡振羽,七月在野,八月在宇,九月在户,十月蟋蟀入我床下。十一月有点凉,十二月被窝到不了的地方都是远方。这句话的意思就是:五月蚱蜢弹腿跳,六月纺织娘振翅,七月蟋蟀在田野,八月来到屋檐下,九月蟋蟀进门口,十月钻进我床下。十一月天气有点凉,十二月被窝到不了的地方都是远方。

           既然天气这么冷,不想去远方,不如搞点事情吧~ 前几天因为工作关系,需要远程其他地方的电脑,为了方便,下载了某远程工具,结果自动安装上了一堆的流氓软件,其中就有一个压缩软件,天天推送一些不知所云的广告,让我花费了很大的力气才彻底清除。我在想能不能用Python自己实现一个压缩软件,这样自己用的也方便,也不怕有什么广告了,我们的故事便从这里开始……


    一、相关库简介

           (1)zipfile库

           首先我想到了Python中有一个实现解压缩的很方便的库——zipfile库。zipfile用来做zip格式编码的压缩和解压缩,由于是很常见的zip格式,所以这个模块使用频率也是比较高。它有两个非常重要的class,分别是ZipFile和ZipInfo, 在绝大多数的情况下,只需要使用这两个class就可以。ZipFile是主要的类,用来创建和读取zip文件;ZipInfo是存储的zip文件的每个文件的信息的。

           (2)os库

           Python的os模块提供了简单方便的方法来使用操作系统的一些功能。就是说通过os库可以使用python执行一些常见的操作系统的功能,比如切换目录,增删文件,设置环境变量,运行shell 命令等等。以下是os库常用的部分:

    os.sep:可以取代操作系统特定的路径分隔符。
    os.name:字符串指示你正在使用的平台。比如对于Windows,它是'nt',而对于Linux/Unix用户,它是'posix'。
    os.getcwd():函数得到当前工作目录,即当前Python脚本工作的目录路径。
    os.getenv():获取一个环境变量,如果没有返回none。
    os.link():方法用于创建硬链接。
    os.mkdir():方法用于以数字权限模式创建目录。
    os.listdir(path):返回指定目录下的所有文件和目录名。
    os.remove(path):函数用来删除一个文件。如果指定的路径是一个目录,将抛出OSError,在Unix,Windows中有效。
    os.rmdir(path):方法用于删除指定路径的目录。仅当这文件夹是空的才可以,否则,抛出OSError。
    os.system(command):函数用来运行shell命令。
    os.linesep:字符串给出当前平台使用的行终止符。
    os.curdir:返回当前目录('.')。
    os.chdir(dirname):改变工作目录到dirname。
    
    os.path常用方法:
    os.path.isfile(path)和os.path.isdir(path)函数:分别检验给出的路径是一个文件还是目录,绝对路径。
    os.path.existe():函数用来检验给出的路径是否真地存在。
    os.path.getsize(name):获得文件大小。
    os.path.abspath(name):获得绝对路径。
    os.path.normpath(path):规范path字符串形式。
    os.path.split(path):将path分割成目录和文件名二元组返回。
    os.path.splitext():分离文件名与扩展名。
    os.path.join(path,name):连接目录与文件名或目录;使用“\”连接。
    os.path.basename(path):返回文件名。
    os.path.dirname(path):返回文件路径​。

           (3)Tkinter组件

           Tkinter提供的各种控件如下图所示:

           Tkinter组件的标准属性(所有控件均有的属性)如下所示:

           Tkinter控件有特定的几何状态管理方法,管理整个控件区域组织,以下是Tkinter公开的几何管理类:包、网格、位置。

    二、相关方法编写

           1、首先需要有选择文件的功能,例如:选择需要压缩的文件和选择需要解压缩的文件,方法如下:

    def choose_compress_file():
        '''
        选择需要压缩的文件
        :return:
        '''
        compress_file_path_name.set(askdirectory())
    
    def choose_uncompress_file():
        '''
        选择需要解压的文件
        :return:
        '''
        uncompress_file_path = askopenfilename()
        uncompress_file_path.replace("/", "\\\\")  # 字符转义
        uncompress_file_path_name.set(uncompress_file_path)

           2、选择文件的功能有了,就需要思考一个问题:解压的文件需要有一个解压的目录,所以此处还需要一个解压到某个目录的方法,如下:

    def choose_uncompress_dir():
        '''
        选择解压到的目录
        :return:
        '''
        uncompress_file_terminal_path_name.set(askdirectory())

           3、然后,压缩、解压成功或者失败后是不是得需要设置一些信息进行以下提示,这里又需要压缩或解压成功、失败的提示信息方法,如下所示:

    def compress_file_success_message():
        '''
        压缩文件成功后,弹出信息框
        :return:
        '''
        tkinter.messagebox.askokcancel(title='success', message='压缩成功!')
    
    def uncompress_file_success_message():
        '''
        解压文件成功后,弹出信息框
        :return:
        '''
        tkinter.messagebox.askokcancel(title='success', message='解压成功!')
    
    def uncompress_file_failure_message():
        '''
        解压失败弹出框
        :return:
        '''
        tkinter.messagebox.askokcancel(title='failed', message='这不是zip压缩文件!')

           4、这些基本方法设置完之后,就到了核心模块了——压缩和解压缩的方法。

    def compress_file():
        '''
        压缩文件
        :return:
        '''
        # 给压缩文件加上.zip
        compress_file_name = compress_file_path_name.get() + '.zip'
    
        # 写入
        zip = zipfile.ZipFile(compress_file_name, 'w', zipfile.ZIP_DEFLATED)
    
        # 遍历目录路径、目录名、文件名
        for dirpath, dirnames, filenames in os.walk(compress_file_path_name.get()):
            fpath = dirpath.replace(compress_file_path_name.get(), '')
            fpath = fpath and fpath + os.sep or ''
    
            # 迭代文件名
            for filename in filenames:
                zip.write(os.path.join(dirpath, filename), fpath + filename)  # 写入
            zip.close()
    
            # 压缩成功,弹出信息框
            compress_file_success_message()
    
    def upcompress_file():
        '''
        解压缩文件
        :return:
        '''
        # 判断是否为压缩文件,以文件后缀是否为.zip为判断依据
        is_true = zipfile.is_zipfile(uncompress_file_path_name.get())
    
        if is_true:
            # 读取压缩文件
            unzip = zipfile.ZipFile(uncompress_file_path_name.get(), 'r')
            # 遍历文件
            for file in unzip.namelist():
                # 输出文件
                unzip.extract(file, uncompress_file_terminal_path_name.get())
    
            # 解压成功,弹出信息框
            uncompress_file_success_message()
        else:
            # 解压失败,弹出信息框
            uncompress_file_failure_message()

           5、当然还得需要咱们的图形用户界面,所以此处还是设置一个图形用户界面的方法,如下:

    def graphical_user_interface():
        '''
        图形用户界面
        :return:
        '''
        # label:ow代表label是放在第几行,column是放在第几列
        Label(root, text='压缩文件路径:').grid(row=0, column=0)
    
        # entry:获取输入
        Entry(root, textvariable=compress_file_path_name).grid(row=0, column=1)
    
        # 操作按钮
        Button(root, text='选择压缩文件', command=choose_compress_file).grid(row=0, column=2)
    
        # label标签
        Label(root, text='解压文件路径:').grid(row=1, column=0)
    
        # 获取输入
        Entry(root, textvariable=uncompress_file_path_name).grid(row=1, column=1)
    
        # 操作按钮
        Button(root, text='选择解压文件', command=choose_uncompress_file).grid(row=1, column=2)
    
        # label标签
        Label(root, text='解压到:').grid(row=2, column=0)
    
        # 获取输入
        Entry(root, textvariable=uncompress_file_terminal_path_name).grid(row=2, column=1)
    
        # 操作按钮
        Button(root, text='选择解压路径', command=choose_uncompress_dir).grid(row=2, column=2)
    
        # 操作按钮
        Button(root, text='点击压缩', command=compress_file).grid(row=3, column=0)
    
        # 操作按钮
        Button(root, text='点击解压', command=upcompress_file).grid(row=3, column=2)
    
        # 操作按钮
        Button(root, text='退出', command=root.quit).grid(row=4, column=1)
    
        # 显示操作界面
        root.mainloop()

           至此,所需要的所有方法均已经设置完毕。是时候进行测试了~

    三、测试

    if __name__ == '__main__':
        # 初始化,并设置文件名称
        root = Tk(className='轻压-极简版')
        # 设置标题,与root = Tk(className='轻压-极简版')有异曲同工之妙
        # root.title('轻压')
    
        # 设置压缩屏幕大小
        # root.geometry('1000x150')
    
        # 设置压缩图标
        # root.iconbitmap(default='xzw.ico')
    
        # 显示需要压缩的文件路径名
        compress_file_path_name = StringVar()
    
        # 显示需要解压的文件路径名
        uncompress_file_path_name = StringVar()
    
        # 显示文件想要解压到的路径名
        uncompress_file_terminal_path_name = StringVar()
    
        # 函数调用,显示图形用户界面
        graphical_user_interface()

           测试结果如下:

           点击相应的按钮可以进行压缩和解压缩的操作~ 这样又暴露出了一个问题,如果别人想用这个软件,但是又不具备Python环境,这样该怎么办呢?于是便有了一下打包成.exe文件的操作。

    四、打包成.exe文件

           可以使用pyinstaller命令打包对应的.py文件。pyinstaller命令常用的参数如下所示:

    -F, --onefile Py代码只有一个文件
    -D, --onedir Py代码放在一个目录中(默认是这个)
    -K, --tk 包含TCL/TK
    -d, --debug 生成debug模式的exe文件
    -w, --windowed, --noconsole 窗体exe文件(Windows Only)
    -c, --nowindowed, --console 控制台exe文件(Windows Only)
    -X, --upx 使用upx压缩exe文件
    -o DIR, --out=DIR 设置spec文件输出的目录,默认在PyInstaller同目录
    --icon=<FILE.ICO> 加入图标(Windows Only)
    -v FILE, --version=FILE 加入版本信息文件

           这里,我们使用如下命令进行打包:

    pyinstaller -w -F -i compressed_software/favicon.ico compressed_software/lkys.py

           在控制台出现如下情况说明打包成功:

            打包后的.exe文件会出现在项目的dist目录下,将其拷贝出来后,如下所示:

           点击运行,如下所示,说明成功:

    五、一些并不怎么愉快的事情

           打包成.exe文件后,在运行时发生了一些并不怎么愉快的事情,首先运行的时候会报一个运行脚本发生错误的问题,如下所示:

           因为打包时使用了-w的参数,所以运行.exe文件并没有启动Windows窗口,故而再次打包。发现报了如下两个错误:

           1、_tkinter.TclError: bitmap "xzw.ico" not defined

           2、PermissionError: [Errno 13] Permission denied: 'picture.ico'

           相关错误的解决办法,有兴趣的可以点击错误链接查看。

    六、源码

           源码已经同步至GitHub,有兴趣的同志可以点此进行查看~ 因为时间关系,此次压缩软件图形用户界面做的比较简陋,只能算是极简版,往后会慢慢的更新优化用户界面,相关代码也会在GitHub上实时更新,本篇文章到此结束,谢谢大家。

     

           你们在此过程中遇到了什么问题,欢迎留言,让我看看你们都遇到了哪些问题。

    展开全文
  • SVC视频压缩代码

    2014-01-03 16:37:27
    是一款还好视频压缩软件代码,对初学者很有用
  • 我们在上传视频时候,往往会考虑视频大小,格式,以及传输视频流等诸多因素,为此,网上有了许多视频压缩软件。我这里有一个视频压缩处理软件代码。有想了解朋友可以下下来学习一下。
  • ②写出每一个字节所对应...但是,问题又来了不是所有 01String 都是8整数倍,所以就又得在不是 8 整数倍 String 后面补上0Java代码/////写入每一个字节所对应String编码intcount=0;//记录中转字符个数in...
  • 应该是效率比较高一种压缩工具,含4中源代码:c/cpp/cs/java
  • //记录压缩前文件长度     char  ch,bin[10];  //存储读入字符    huflink s,p;   hufnode list[256];    int  i,j,word,count;    FILE  *f_in,*f_out;    //--------------...
  • 可执行文件压缩软件,含源代码,支持 dos/exe、dos/com、dos/sys、djgpp2/coff、 watcom/le、win32/pe、rtm32/pe、减小可执行文件,保护可执行文件,使之不容易被修改和破解。。源代码可在windows,linux/unix下成功...
  • 之前也了解过这是一种保护.net代码的方法,很多都是用了专门的混淆器,或者压缩器。混淆器是把代码混淆成看不懂的字符,或者更强的是加密代码,即使反编译,你也根本也就看不见代码了。压缩器我感觉也很牛,因为不但...
  • CSS 是一种必须的手段,因为这样做可以提高用户访问网站的速度以及代码的安全性等问题。世面上面都有很多的在线压缩器,把代码放在云端压缩实在是不放心。   如何开发?  使用市面上面对外开源的压缩器!  CSS ...
  • 好用的 js 压缩工具 压缩软件 压缩程序 JsZIP(JavaScript压缩工具) 名称:JsZIP(JavaScript压缩工具) 版本:2.0 特点:高压缩、汉字转汉、代码智能优化、采用微软提供的压缩库(安全、准确) 之前写...
  • 软件使用64位换算技术/使加壳软件运行更加流畅,更加稳定!更值得提倡是软甲压缩率达到百分之七十以上...使用超级压缩功能压缩率更达到百分之八十之上,加壳加压缩的同时软件会自动去除多余代码,精简您程序代码

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 3,423
精华内容 1,369
关键字:

压缩代码的压缩软件