在带有用于CCITTFaxDecode过滤器的PyPDF2的Python中:

import PyPDF2

import struct

"""

Links:

PDF format: http://www.adobe.com/content/dam/Adobe/en/devnet/acrobat/pdfs/pdf_reference_1-7.pdf

CCITT Group 4: https://www.itu.int/rec/dologin_pub.asp?lang=e&id=T-REC-T.6-198811-I!!PDF-E&type=items

Extract images from pdf: http://stackoverflow.com/questions/2693820/extract-images-from-pdf-without-resampling-in-python

Extract images coded with CCITTFaxDecode in .net: http://stackoverflow.com/questions/2641770/extracting-image-from-pdf-with-ccittfaxdecode-filter

TIFF format and tags: http://www.awaresystems.be/imaging/tiff/faq.html

"""

def tiff_header_for_CCITT(width, height, img_size, CCITT_group=4):

tiff_header_struct = '

return struct.pack(tiff_header_struct,

b'II',  # Byte order indication: Little indian

42,  # Version number (always 42)

8,  # Offset to first IFD

8,  # Number of tags in IFD

256, 4, 1, width,  # ImageWidth, LONG, 1, width

257, 4, 1, height,  # ImageLength, LONG, 1, lenght

258, 3, 1, 1,  # BitsPerSample, SHORT, 1, 1

259, 3, 1, CCITT_group,  # Compression, SHORT, 1, 4 = CCITT Group 4 fax encoding

262, 3, 1, 0,  # Threshholding, SHORT, 1, 0 = WhiteIsZero

273, 4, 1, struct.calcsize(tiff_header_struct),  # StripOffsets, LONG, 1, len of header

278, 4, 1, height,  # RowsPerStrip, LONG, 1, lenght

279, 4, 1, img_size,  # StripByteCounts, LONG, 1, size of image

0  # last IFD

)

pdf_filename = 'scan.pdf'

pdf_file = open(pdf_filename, 'rb')

cond_scan_reader = PyPDF2.PdfFileReader(pdf_file)

for i in range(0, cond_scan_reader.getNumPages()):

page = cond_scan_reader.getPage(i)

xObject = page['/Resources']['/XObject'].getObject()

for obj in xObject:

if xObject[obj]['/Subtype'] == '/Image':

"""

The  CCITTFaxDecode filter decodes image data that has been encoded using

either Group 3 or Group 4 CCITT facsimile (fax) encoding. CCITT encoding is

designed to achieve efficient compression of monochrome (1 bit per pixel) image

data at relatively low resolutions, and so is useful only for bitmap image data, not

for color images, grayscale images, or general data.

K < 0 --- Pure two-dimensional encoding (Group 4)

K = 0 --- Pure one-dimensional encoding (Group 3, 1-D)

K > 0 --- Mixed one- and two-dimensional encoding (Group 3, 2-D)

"""

if xObject[obj]['/Filter'] == '/CCITTFaxDecode':

if xObject[obj]['/DecodeParms']['/K'] == -1:

CCITT_group = 4

else:

CCITT_group = 3

width = xObject[obj]['/Width']

height = xObject[obj]['/Height']

data = xObject[obj]._data  # sorry, getData() does not work for CCITTFaxDecode

img_size = len(data)

tiff_header = tiff_header_for_CCITT(width, height, img_size, CCITT_group)

img_name = obj[1:] + '.tiff'

with open(img_name, 'wb') as img_file:

img_file.write(tiff_header + data)

#

# import io

# from PIL import Image

# im = Image.open(io.BytesIO(tiff_header + data))

pdf_file.close()

python pdf处理 图片_在Python中从PDF提取图像而无需重新采样?相关推荐

  1. python pypdf2另存为图片_用Python玩转PDF的各种骚操作

    文/Python数据科学  图片来源于网络 Portable Document Format(可移植文档格式),或者PDF是一种文件格式,可以用于跨操作系统的呈现和文档交换.尽管PDF最初是由Adob ...

  2. python 还原九宫格图片_用Python做一个好玩的朋友圈九宫格抽奖

    最近在朋友圈看到个好玩的抽奖九宫格: 随便点开一个: 设计思路 以朋友圈中看到的1号图做参考,我们需要准备 300*900 的白色底图,搞笑表情图,广告语,中间一个醒目的数字编号,外加下方的嘲讽&qu ...

  3. python 查找损坏图片_使用Python查找损坏的图像

    python 查找损坏图片 赶上本系列: 第1部分:使用Python自动执行数字艺术家的重复任务 第2部分:针对数字艺术家的Python文件管理技巧 如果您正在计算机上处​​理图像,那么最终一定会遇到 ...

  4. python显示gif图片_利用Python制作GIF图片

    #Python制作GIF图片 import imageio def create_gif(image_list, gif_name, duration = 0.1): ''' :param image ...

  5. python生成倒计时图片_用Python自动化生成倒计时图片

    根据书中的「操作图像」章节内容,实现一个简单又实用的小操作. 使用的模块为Pillow,一个处理图像文件的Pyhton模块. 比如裁剪图像.调整图像大小.编辑图像的内容等. 可以实现自动编辑成千上万的 ...

  6. python樱花树画法图片_用Python敲出樱花绽放 | 附代码

    今年武汉大学的樱花依然开得灿烂,但受疫情影响,少了很多去赏花的朋友. (图源 武汉大学微博) 为了让大家看到樱花开放,各路高手纷纷亮出了自己的绝技.要说最秀的,当属用Python让樱花开放. 一时间, ...

  7. python批量裁剪图片_用Python写了一个图片格式批量处理工具

    来源:blog.csdn.net/kimol_justdo 前言 就在昨天,正当我在刺激战场厮杀时,"叮叮叮",微信来消息了.我心想:"这是肾马情况?" 我打开 ...

  8. mac用python爬虫下载图片_利用Python爬虫采集mac电脑皮肤|简明python教程|python入门|python教程...

    https://www.xin3721.com/eschool/pythonxin3721/ blessing skin网站介绍:blessing skin网址为 https://skin.prinz ...

  9. python 微信发送图片_使用python向企业微信发送文字和图片消息

    使用python向企业微信发送文字和图片消息 吐槽一下企业微信的api文档真的不好读······ 企业微信本来是有功能,可以直接把图片显示到正文的,但是那个api我调用一直出错,各种折腾也没解决.后来 ...

最新文章

  1. 图论 ---- E. Bear and Forgotten Tree 2(判补图的联通性技巧 图遍历的优化 条件拆分)
  2. GHOST_XP详细制作过程
  3. 台湾大学林轩田机器学习技法课程学习笔记10 -- Random Forest
  4. python xlsx 图片_实例11:用Python给Excel所有工作表添加图片
  5. LG状告索尼侵权招致荷兰停息出口PS3
  6. js if判断多个条件_EXCEL一对多条件查找显示多个结果(INDEX+SMALL+IF+ROW函数组合)...
  7. mysql 搭建日志服务器_一、架构01-搭建日志服务器Rsyslog
  8. Firefox下Add-ons推荐
  9. WAVE-U-NET: A MULTI-SCALE NEURAL NETWORK FOR END-TO-END AUDIO SOURCE SEPARATION
  10. cad卸载_CAD卸载后为什么安装不了?解决方法原来是这样!
  11. 用canvas画太极图(一步步详解附带源代码)
  12. 软件测试-面试题(基础+性能)
  13. 计算机硬盘如何安装系统,如何对新计算机硬盘进行分区并安装系统
  14. HITCON-trainning寒假做题记录
  15. 同花顺模拟炒股软件 v8.40.29 官方版
  16. 二级域名泛解析,让iis支持二级域名泛解析
  17. telegram 新增 删除 联系人
  18. 数据库设计学习①:数据库设计简介
  19. 完全用Python工作
  20. 从爆红到凉凉,「蚂蚁呀嘿」只用了 7 天

热门文章

  1. h5如何动态获取键盘高度_动态获取键盘高度
  2. java打开网页横屏_巅峰之战!三款最热java手机浏览器横屏
  3. 皮一皮:没想到被小龙虾套路了...
  4. 彻底解决 gcr、quay、DockerHub 镜像下载难题!
  5. 面试:Java反射到底慢在哪?
  6. 百度开源的 71 个项目,看看你用过几个?
  7. java 静态方法覆盖_Java中方法的覆盖和静态方法的隐藏
  8. 【SpringCloud】Eureka-实例
  9. 值“MT_StaticRelease”不匹配值“MD_DynamicRelease”
  10. c++ opencv Rectangle