python 文件处理

Python库在图像处理与PDF处理中的应用

1. Pillow (PIL)

场景: 使用Pillow进行图像处理,包括图像裁剪、旋转和添加水印。

from PIL import Image, ImageDraw, ImageFont
# 打开图像
image = Image.open("example.jpg")
# 裁剪图像
cropped_image = image.crop((100, 100, 400, 400))
cropped_image.save("cropped_example.jpg")
# 旋转图像
rotated_image = image.rotate(90)
rotated_image.save("rotated_example.jpg")
# 添加水印
draw = ImageDraw.Draw(image)
font = ImageFont.truetype("arial.ttf", 36)
draw.text((10, 10), "Sample Watermark", font=font, fill=(255, 0, 0, 128))
image.save("watermarked_example.jpg")

2. imageio

场景: 使用imageio读取和写入多种格式的图像,并创建一个简单的动画GIF。

import imageio
import numpy as np
# 读取图像
image = imageio.imread('example.jpg')
print("Image shape:", image.shape)
# 写入图像
imageio.imwrite('output.png', image)
# 创建动画GIF
images = []
for i in range(10):
    images.append(np.random.randint(0, 255, (100, 100, 3), dtype=np.uint8))
imageio.mimsave('animation.gif', images, duration=0.5)

3. scikit-image

场景: 使用scikit-image进行图像增强和特征检测。

from skimage import io, exposure, feature
import matplotlib.pyplot as plt
# 读取图像
image = io.imread("example.jpg", as_gray=True)
# 直方图均衡化
equalized_image = exposure.equalize_hist(image)
# Canny边缘检测
edges = feature.canny(equalized_image, sigma=3)
# 显示结果
fig, ax = plt.subplots(nrows=1, ncols=3, figsize=(12, 4))
ax[0].imshow(image, cmap='gray')
ax[0].set_title('Original Image')
ax[0].axis('off')
ax[1].imshow(equalized_image, cmap='gray')
ax[1].set_title('Equalized Image')
ax[1].axis('off')
ax[2].imshow(edges, cmap='gray')
ax[2].set_title('Canny Edges')
ax[2].axis('off')
plt.show()

4. opencv-python

场景: 使用OpenCV进行人脸检测和图像模糊处理。

import cv2
# 读取图像
image = cv2.imread('example.jpg')
# 转换为灰度图像
gray = cv2.cvtColor(image, cv2.COLOR_BGR2GRAY)
# 加载预训练的人脸检测模型
face_cascade = cv2.CascadeClassifier(cv2.data.haarcascades + 'haarcascade_frontalface_default.xml')
# 检测人脸
faces = face_cascade.detectMultiScale(gray, scaleFactor=1.1, minNeighbors=5, minSize=(30, 30))
# 绘制矩形框并模糊处理
for (x, y, w, h) in faces:
    # 绘制矩形框
    cv2.rectangle(image, (x, y), (x+w, y+h), (255, 0, 0), 2)
    # 模糊处理
    face = image[y:y+h, x:x+w]
    blurred_face = cv2.GaussianBlur(face, (99, 99), 30)
    image[y:y+h, x:x+w] = blurred_face
# 显示结果
cv2.imshow('Face Detection and Blurring', image)
cv2.waitKey(0)
cv2.destroyAllWindows()

5. pytesseract

场景: 使用pytesseract进行光学字符识别(OCR)。

import pytesseract
from PIL import Image
# 配置Tesseract路径
pytesseract.pytesseract.tesseract_cmd = r'C:\Program Files\Tesseract-OCR\tesseract.exe'
# 读取图像
image = Image.open('text_image.png')
# 进行OCR
text = pytesseract.image_to_string(image,)
print("Extracted Text:", text)

6. pdfminer.six

场景: 使用pdfminer.six解析PDF文档并提取文本。

from pdfminer.high_level import extract_text
# 读取PDF并提取文本
text = extract_text("example.pdf")
print("Extracted Text:", text)

7. reportlab

场景: 使用ReportLab生成带有表格和图表的PDF文档。

from reportlab.lib.pagesizes import letter
from reportlab.platypus import SimpleDocTemplate, Table, TableStyle, Paragraph
from reportlab.lib.styles import getSampleStyleSheet
from reportlab.lib import colors
# 创建PDF文档
doc = SimpleDocTemplate("report.pdf", pagesize=letter)
# 定义样式
styles = getSampleStyleSheet()
# 创建内容
data = [
    ['Name', 'Age', 'Country'],
    ['Alice', 30, 'USA'],
    ['Bob', 25, 'Canada'],
    ['Charlie', 35, 'UK']
]
table = Table(data)
table.setStyle(TableStyle([
    ('BACKGROUND', (0, 0), (-1, 0), colors.grey),
    ('TEXTCOLOR', (0, 0), (-1, 0), colors.whitesmoke),
    ('ALIGN', (0, 0), (-1, -1), 'CENTER'),
    ('FONTNAME', (0, 0), (-1, 0), 'Helvetica-Bold'),
    ('FONTSIZE', (0, 0), (-1, 0), 14),
    ('BOTTOMPADDING', (0, 0), (-1, 0), 12),
    ('BACKGROUND', (0, 1), (-1, -1), colors.beige),
    ('GRID', (0, 0), (-1, -1), 1, colors.black)
]))
# 添加段落
content = [Paragraph("Report Title", styles['Heading1']), table]
# 生成PDF
doc.build(content)

8. WeasyPrint

场景: 使用WeasyPrint从HTML和CSS生成PDF文档。

from weasyprint import HTML, CSS

# HTML和CSS内容
html_content = """
<!DOCTYPE html>
<html>
<head>
    <title>Sample Report</title>
</head>
<body>
    <h1>Report Title</h1>
    <p>This is a sample report generated using WeasyPrint.</p>
    <table style="border: 1px solid black; border-collapse: collapse;">
        <tr><th>Name</th><th>Age</th><th>Country</th></tr>
        <tr><td>Alice</td><td>30</td><td>USA</td></tr>
        <tr><td>Bob</td><td>25</td><td>Canada</td></tr>
        <tr><td>Charlie</td><td>35</td><td>UK</td></tr>
    </table>
</body>
</html>
"""

css_content = """
body {
    font-family: Arial, sans-serif;
}
h1 {
    color: #333;
}
table, th, td {
    border: 1px solid black;
    padding: 5px;
}
th {
    background-color: #f2f2f2;
}
"""

# 生成PDF
HTML(string=html_content).write_pdf('weasyprint_report.pdf', stylesheets=[CSS(strin

9. PyPDF2

场景: 使用PyPDF2合并多个PDF文件并添加水印。

import PyPDF2
# 合并多个PDF文件
pdf_writer = PyPDF2.PdfFileWriter()
# 读取第一个PDF文件
with open("file1.pdf", "rb") as file:
    pdf_reader = PyPDF2.PdfFileReader(file)
    for page_num in range(pdf_reader.numPages):
        page = pdf_reader.getPage(page_num)
        pdf_writer.addPage(page)
# 读取第二个PDF文件
with open("file2.pdf", "rb") as file:
    pdf_reader = PyPDF2.PdfFileReader(file)
    for page_num in range(pdf_reader.numPages):
        page = pdf_reader.getPage(page_num)
        pdf_writer.addPage(page)
# 添加水印
watermark = PyPDF2.PdfFileReader(open("watermark.pdf", "rb"))
for page_num in range(pdf_writer.getNumPages()):
    page = pdf_writer.getPage(page_num)
    page.mergePage(watermark.getPage(0))
# 保存合并后的PDF文件
with open("merged_with_watermark.pdf", "wb") as output_file:
    pdf_writer.write(output_file)

10. PyMuPDF (fitz)

场景: 使用PyMuPDF提取PDF中的文本和图像。

import fitz  # PyMuPDF
# 读取PDF文件
doc = fitz.open("example.pdf")
# 提取文本
for page_num in range(len(doc)):
    page = doc.load_page(page_num)
    text = page.get_text("text")
    print(f"Page {page_num + 1} Text:\n{text}\n")
# 提取图像
for page_num in range(len(doc)):
    page = doc.load_page(page_num)
    images = page.get_images(full=True)
    for img_index, img in enumerate(images):
        xref = img[0]
        base_image = doc.extract_image(xref)
        image_bytes = base_image["image"]
        image_ext = base_image["ext"]
        with open(f"page{page_num+1}_img{img_index+1}.{image_ext}", "wb") as image_file:
            image_file.write(image_bytes)

最后: 下方这份完整的软件测试视频教程已经整理上传完成,需要的朋友们可以自行领取【保证100%免费】

软件测试面试文档

我们学习必然是为了找到高薪的工作,下面这些面试题是来自阿里、腾讯、字节等一线互联网大厂最新的面试资料,并且有字节大佬给出了权威的解答,刷完这一套面试资料相信大家都能找到满意的工作。

在这里插入图片描述

在这里插入图片描述

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值