精华内容
下载资源
问答
  • eXeScope 图片提取器

    2014-04-19 03:24:16
    eXeScope 图片提取器编程盗图必备
  • 动态图片提取器源码

    2012-10-04 09:40:14
    动态图片提取器源码
  • 半次元图片提取器是一款用于图片提取的下载工具,无需登录账号即可轻松快捷下载,快来下载体验吧。 软件介绍 如果网页不更新这个工具基本是不会更新的 使用说明 1.解压文件; 2.输入半次元的链接; 3.点击一键...
  • 图酷图片提取器图酷图片提取器图酷图片提取器图酷图片提取器图酷图片提取器图酷图片提取器图酷图片提取器
  • CSS图片提取器 提取网页
  • 酷狗音乐歌词写真图片提取器,帮你把酷狗音乐里面的的歌词写真图片以JPG形式导出
  • css图片提取器.exe

    2012-11-06 13:32:53
    css图片提取器,可以直接下载CSS中图片,并按CSS路径自动分类图片
  • Some PDF Images Extract是一个能够一键批量导出PDF文档中插入的图片的pdf图片提取器,有的PDF文档中的图片非常有用,但是通过截图肯定会损失图片质量,所以这款软件就显得很有必要性,快来下载体验吧!
  • PDF文件图片提取器,提取PDF里面的一些图片文件 直接提取保存,绿色安全版,请各位放心使用!
  • CSS图片提取器

    2015-07-30 18:10:23
    针对根目录下(../跟 ./) 超长图片地址获取不到,监控不到,获取不到的图标,可以提取,100%提取的到,如果第一次提取不到,那就复制CSS的地址张贴到上面 会自动下载到桌面
  • png图片提取器

    2012-01-08 16:03:37
    提取器能从jar游戏包中的后缀名未知的文件中提取png格式的图片
  • 神器中的神器,能够对常见的图片格式进行偏移,LSB提取、帧提取、像素偏移、数据提取,对两张图片进行结合等等。
  • office image exporter(office图片提取器)V1.4 简体中文版 本软件支持word图片,PPT图片,pdf图片一次性快速导出!简单、方便、快速。 修正1.3版本不可用毛病。
  • C# 纯色图片提取器

    2014-01-10 18:03:25
    这个资源是好久之前为了应付项目需要做得一个没有太多优化的纯色图片读取,首先我解释下纯色图片,在这里纯色图片指的是在一张图片里它只有一种颜色。所以这个软件的需求就是,假定文件夹里有一批图片,纯色的和...
  • windows聚焦图片是不是很好看?但是又苦于去找,不用担心,用它!一键获取windows聚焦开机图片
  • 简单的 缩略图提取器 适用于xp的thumbs.db
  • anr_fetcher 适用于Android的卡片图像获取程序:Netrunner和OCTGN 用法 将anr_fetcher.zip复制到您的OCTGN目录中(通常在“我的文档”中) 提取net-card-dl.jar和launcher.bat 双击lanch.bat 享受!
  • 有些手机应用图片资源都包在一个(或多个)文件,可以通过这个工具把里面的图片提取出来
  • 开源审核工具包 ... 提取标题/链接/图像-轻松提取网站上的所有链接及其状态代码,页面标题和所有图像。 Sitemap Extractor-从其站点地图中提取网站的所有网址 汇总-汇总任何长度的任何文本。 很棒的摘录!
  • 用户提取大话2 梦幻 大话3 大话外传的 was/wap/tca/tcp 游戏精灵文件的图片为TGA格式。 注:提取颜色和云风的glowtools提取的有很小的差别,肉眼不容易识别。原因是我用的RGB565转RGB888算法和云风不一样。
  • 前言: 大家好,今天教大家做一个综合性较强的Python实战练习:用Python提取PDF...那么今天我们需要做的,便是将这两个内容灵活的结合起来,做出分析,并结合GUI框架PysimpleGUI,做一个多文件图片提取软件。 如图所示.

    前言:

    大家好,今天教大家做一个综合性较强的Python实战练习:用Python提取PDF与Word中的图片

    要想实现我们今天的主题,首先不得不涉及到Python中一个非常常见的框架内容GUI,以前我们在文章中也有讲过一些涉及 python GUI 框架的开发案例;其次是利用Python进行excel/word/pdf 等文档的读写,这一内容在以前的文章中也有讲解。那么今天我们需要做的,便是将这两个内容灵活的结合起来,做出分析,并结合GUI框架PysimpleGUI,做一个多文件图片提取软件。
    如图所示:

    本文主要将分为以下部分讲解:

    • PDF、Word 文件图片提取
    • 构造图片提取器GUI框架
    • 整合代码并打包

    主要涉及的Python模块有:

    • PIL
    • PySimpleGUI
    • re
    • win32
    • os
    • zipfile
    • fitz

    模块安装

    首先使用pip安装相关依赖模块

    pip install pillow   #这是对模块PTL的安装
    pip install pypiwin32    #这是对win32的安装
    pip install os 
    pip install zipfile
    pip install PyMuPDF  #这是引用fitz对PDF操作的包
    pip install PySimpleGui
    

    一、提取各文件内嵌图片

    读取Excel有两种方法。一种是将后缀名改成.zip格式进行提取,一种是通过Pillow模块对Excel进行图片复制与保存。Word提取图片方法和通过.zip提取方法类似,PDF提取图片方法要用到专门的模块。这篇文章里只对PDF和Word的提取方法展开讲解,Excel 的读取方法类似,可参见代码。

    1.1 提取Word图片

    我们先看代码

    path = values["lujing"]  
    count = 1
    for file in os.listdir(path):
        new_file = file.replace(".docx",".zip")
        os.rename(os.path.join(path,file),os.path.join(path,new_file))
        count+=1      
        number = 0
        craterDir = values["lujing"] + '/'  # 存放zip文件的文件夹路径
        saveDir = values["lujing"] + '/' # 存放图片的路径
        list_dir = os.listdir(craterDir) # 获取所有的zip文件名
        for i in range(len(list_dir)):
            if 'zip' not in list_dir[i]:
                list_dir[i] = ''
                while '' in list_dir:
                    list_dir.remove('')                            
                    for zip_name in list_dir:
                        # 默认模式r,读
                        azip = zipfile.ZipFile(craterDir + zip_name)
                        # 返回所有文件夹和文件
                        namelist = (azip.namelist())
                        for idx in range(0,len(namelist)):
                            if namelist[idx][:11] == 'word/media/':#图片是在这个路径下
                                img_name = saveDir + str(number)+'.jpg'
                                f = azip.open(namelist[idx])
                                img = Image.open(f)
                                img = img.convert("RGB")
                                img.save(img_name,"JPEG")
                                number += 1
                                azip.close()  #关闭文件,必须有,释放内存
    

    这里的代码和通过.zip方式提取Excel图片的代码思路是一样的。

    path = values["lujing"]这里是读取GUI中键为**“lujing”**的值,也即文件存储位置,用于os模块读取与操作。

    new_file = file.replace(".docx",".zip")是替换后缀名,如果是Excel的话,就把.docx改成.xlsxxls

    craterDir = values["lujing"] + '/' 这是存放zip文件的文件夹路径,注意这里读取到的键为“lujing”的值后要在后面添加/

    saveDir = values["lujing"] + '/' 这是存放图片的路径,同理,和上面一样加个/号。

    最后说一下与Excel提取相比,最大的不同是下面的代码

    if namelist[idx][:11] == 'word/media/':
    

    中括号里面的值不一样。很好理解,我们可以打印namelist[idx],可以发现在索引0到10是'word/media/'所在位置。而在Excel中是前9位。

    1.2 提取PDF图片

    先来看看相关代码:

    def pdf2pic(path, pic_path):
        doc = fitz.open(path)
        nums = doc._getXrefLength()
        imgcount = 0 
        for i in range(1, nums):
            text = doc._getXrefString(i)
            if ('Width 2550' in text) and ('Height 3300' in text) or ('thumbnail' in text):
                continue
                checkXO = r"/Type(?= */XObject)"
                checkIM = r"/Subtype(?= */Image)"
                isXObject = re.search(checkXO, text)
                isImage = re.search(checkIM, text)
                if not isXObject or not isImage:
                    continue
                    imgcount += 1
                    pix = fitz.Pixmap(doc, i)
                    img_name = "img{}.png".format(imgcount)
                    if pix.n < 5:
                        try:
                            pix.writePNG(os.path.join(pic_path, img_name))
                            pix = None
                            except:
                                pix0 = fitz.Pixmap(fitz.csRGB, pix)
                                pix0.writePNG(os.path.join(pic_path, img_name))
                                pix0 = None
    if __name__ == '__main__':
        path = values["lujing"]+ '/' + values["wenjian"]
        pic_path = values["lujing"]
        pdf2pic(path, pic_path)
    

    先说一下这段代码的思路吧,由于PDF不能像Excel和Word一样改后缀名进行提取,故这里运用python的一个模块PyMuPDF,过程如下

    • 读取PDF并遍历每一页
    • 筛选无用的元素并用正则表达式获取图片
    • 生成并保存图片

    fitz.open(path)是打开PDF文件夹,这里的path是需要在GUI界面中获取用户的文件存放路径与文件名的。

    for i in range(1, nums):
        text = doc._getXrefString(i)
    

    这是我们的第一步读取并遍历,将读取到的字符串内容放入到text中

    if ('Width 2550' in text) and ('Height 3300' in text) or ('thumbnail' in text):
     continue
    

    由于PDF每一页的背景就是一张图片,故我们可以通过宽高来寻找这些背景图片并用continue把他们剔除。

    checkXO = r"/Type(?= */XObject)"
    checkIM = r"/Subtype(?= */Image)"
    isXObject = re.search(checkXO, text)
    isImage = re.search(checkIM, text)
    if not isXObject or not isImage:
        continue
    

    我们通过实验发现图片所对应的字符串在checkxocheckIM这两个中。故用正则表达式在text中进行索引提取,用到了re模块的search函数。如果不是这两个字符串就用continue剔除。

    pix = fitz.Pixmap(doc, i)
    img_name = "img{}.png".format(imgcount)
    if pix.n < 5:
     try:
      pix.writePNG(os.path.join(pic_path, img_name))
      pix = None
     except:
      pix0 = fitz.Pixmap(fitz.csRGB, pix)
      pix0.writePNG(os.path.join(pic_path, img_name))
      pix0 = None
    

    这是最后一步生成与保存图片

    pix = fitz.Pixmap(doc, i)是生成图像语句,doc代表PDF文件,i代表遍历每个图片对象的索引值。

    img_name = "img{}.png".format(imgcount)是设置图像名语句,用提取到的图片的序列号作为命名格式。

    而后if嵌套try那几行代码是保存图像语句。如果pix.n<5,可以直接存为PNG,否者将进行RGB变换在保存。

    最后,传递参数,调用函数。

    完成了图片的提取,接下来就是 GUI 的构建了。

    二、GUI框架的构建

    先看完整代码:

    import PySimpleGUI as sg
    sg.ChangeLookAndFeel('GreenTan')   #更换主题
    menu_def = [['&使用说明', ['&注意']]]
    layout = [
        [sg.Menu(menu_def, tearoff=True)],
        [sg.Frame(layout=[
        [sg.Radio('Excel1', "RADIO1",size=(10,1),key="Excel1"),  sg.Radio('Word', "RADIO1",default=True,key="Word")],
        [sg.Radio('Excel2', "RADIO1", enable_events=True, size=(10,1),key="Excel2"), sg.Radio('PDF', "RADIO1",key="PDF")]], title='选项',title_color='red', relief=sg.RELIEF_SUNKEN, tooltip='Use these to set flags')],
        [sg.Text('文件位置', size=(8, 1), auto_size_text=False, justification='right'),
         sg.InputText(enable_events=True,key="lujing"), sg.FolderBrowse()],
        [sg.Text('文件名字', size=(8, 1), justification='right'),
         sg.InputText(enable_events=True,key="wenjian")],
        [sg.Submit(tooltip='文件'), sg.Cancel()]]
    
    window = sg.Window('图片提取器', layout, default_element_size=(40, 1), grab_anywhere=False)
    while True:
        event, values = window.read()
        if event == "Submit":
            if values["Excel2"] == True:
       '''
       事件绑定
       '''
                sg.Popup("提取成功")
    
            if values["Excel1"] == True:
       '''
       事件绑定
       '''
                sg.Popup("提取成功")
            if values["Word"] == True:
       '''
       事件绑定
       '''
                sg.Popup("提取成功") 
            if values["PDF"] == True:
       '''
       事件绑定
       '''
                sg.Popup("提取成功")
        if event == "Cancel" or event == sg.WIN_CLOSED:
            break    
        if event == "注意":
            sg.Popup("作用讲解:",
                     "Excel1 :解析选定位置中所有的Excel文件,无需在文件名处填写",
                     "Excel2 :解析选定位置中单个指定的Excel文件,需在文件名处填写",
                     "Word :  解析选定位置中单个指定的docx结尾的文件,无需在文件名处填写",
                     "PDF :   解析选定位置中单个指定的PDF文件,需在文件名处填写")
    window.close()           
    

    效果呈现:

    代码解析:做PySimpleGUI还是原来那个步骤:

    Import Create some widgets Create the window Create the event loop

    当然,做GUI之前就是先想清楚自己的图形交互页面长什么样,像我就是现在纸上画一个大概,这样更有益于制作页面

    第一步:引用模块

    第二步:添加元素(小部件)到容器(layout)中,这里先介绍一下用到的部件:

    Menu:顾名思义,这是菜单栏,每个GUI都必带一个菜单栏来提示使用者该如何做,我们这里用了menu_def这个布局来完成菜单的设置。

    Frame:这个跟layout布局完全相同,工作方式也一样,他们都是容器元素。可以看到“选项”那里是一个凹槽的正方形,里面装有四个选项,作用就是这个。注意,&这个符号的作用是创建相同类型的菜单,这里只有注意事项这一个菜单,故可以不用管,读者如果想添加同样的菜单的话必须添加一个&tearoff=True这个参数是菜单栏中每个子选项上面加虚线。

    Radio:单选按钮。我们只可以在同样的id上选择一个选项。id就是指代码中的“ra-dio1”。其中每个radio函数的第一个参数是文本内容,这里就是我们要进行提取的4个文件格式。而“size”就是位置,每行的第一个设同样的参数(10,1)。最后就是我们进行事件绑定的键,其中“enable_events”可以不写因为我们只是调用它而不用去对它产生事件。

    Text:之前有讲是不能改的正文内容。同样这里设置的位置参数(8,1),justification='right'有点类似我们平常用word那个向右对齐。

    InputText:需要用户输入的正文内容。这里有两个需要我们填写的地方:文件位置和文件名。这里需要设置键,因为在后面事件绑定中我们需要调用文件存储路径和文件名,在文中上半部分有提到过。

    FolderBrowse:简易的打开文件路径操作,不用你去复制路径。

    Submit:确定按钮,这里绑定为执行提取文档图片事件

    Cancel:退出主程序按钮。

    第三步:创建窗口来容纳这些元素布置。

    第四步:创建事件循环,可以看到代码,都是一样的套路:当用户按下submit按钮时系统将进行判断你按的是哪个单选按钮,进而进行相对应的事件执行。当你按下cancel或者×时,就是退出主程序。当你按菜单中的注意时,就会弹出一个对话框告诉你这个系统怎么用。

    在事件循环中,我们用values[]的布尔值来判断我们选的是哪个单选按钮,有读者疑问为什么不用event=,因为我们在第一个if当中用了event所以第二个if当中需要换一个判断方法。

    至此,GUI部分就搞定了!感兴趣的读者可以继续在上面添加功能。

    三、整合代码并打包

    我们将完整代码整合在一起,后安装pyinstaller模块

    pip install pyinstaller
    

    如果你的上述项目代码文件命名为:photo.py。那么你要用下面命令进行打包

    pyinstaller photo.py
    

    最后打包成功之后,你会在py文件所在文件夹看到一个dist的子文件夹。进去之后,找到pachong.exe文件并运行它即可。

    注意,文件夹里附带了很多文件,你可以删除它。当然,如果嫌麻烦就直接从photo.py文件用Python执行。

    写在最后

    今天的内容就到这里啦,希望可以对你有所帮助。如果有需要本文源码的同学可以私信我关键字:PY GUI,我会将源码分享给有需要的人。

    也欢迎各路大神在评论区提出问题与建议,希望能与大家共同进步。

    展开全文
  • 图片组文件提取器.rar

    2020-04-07 12:39:58
    图片组文件提取器.rar
  • 图片文字提取器

    热门讨论 2012-06-11 22:27:58
    该软件能够从截取的图片中,将文本提取出来,就像QQ截图一样的简单,如果大家有这方面的需求,不防下下来用一下. 我自己用着觉得挺好用的,识别的正确率很高.
  • 易语言图片组文件提取器源码,图片组文件提取器,保存到目录,超列_排序,超列_移动项,超列_项是否能上移,超列_项是否能下移,超列_全选,超列_反选,处理子程序_1,超列_调列宽,打开_图片文件目录,图标句柄取字节集,图标_取...
  • MTK工程BIN文件图片资源提取器, 源代码 可提取bmp gif jpg 格式图片
  • 最新网址提取器 可以提取图片 指定内容
  • PC版的微信,会下载图片到本地,但是有加密保护,后缀该为.dat,就算你强行打开,也是加密过的密文,无法使用。不过借助整个小工具,就可以直接“破解”微信图片的密码啦。C#语言编写,含源代码,一用就灵,一看就懂...
  • 功能比 resource hacker更强大,可以提取 resource hacker提取不到的软件资源。
  • 魔力宝贝图片动画提取器

    热门讨论 2010-12-20 14:35:39
    图片模式下的"背景透明"是指显示图片时是否过滤透明色(绝大部分图片的透明色是黑色),有少数图片在白色背景下看起来效果不好,可以关掉此选项。 动画模式下的"黑色背景"作用类似。 保存的时候如果不选择目录,则...

空空如也

空空如也

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

图片提取器