当前位置: 首页 > news >正文

福田网站建设有限公司第三方网站备案

福田网站建设有限公司,第三方网站备案,做网站工资怎么样,网页实时翻译软件前言 该工具是我认识的一位中科大的大佬在本科毕业的时候做的一个小工具,去打印店打印全彩的毕业论文的话会比较贵,他想到有没有一种方案可以实现有彩色页面的pdf和没有彩色页面的pdf分开打印,前者打印彩色,后者打印黑白&#xf…

前言

该工具是我认识的一位中科大的大佬在本科毕业的时候做的一个小工具,去打印店打印全彩的毕业论文的话会比较贵,他想到有没有一种方案可以实现有彩色页面的pdf和没有彩色页面的pdf分开打印,前者打印彩色,后者打印黑白,这样做的话可以节约很多打印彩色pdf页面的钱,然后这位大佬就做了这样一个小工具,省了一笔打印费,代码和原文链接在文末,我这里介绍下其大致的代码逻辑

1. is_color_image 函数

功能: 检查给定图像是否为彩色图像。

逻辑:

  • 将图像转换为 RGB 模式。
  • 将图像转换为 NumPy 数组,并归一化像素值到 [0,1] 范围。
  • 计算每个像素的最大和最小 RGB 值。
  • 计算每个像素的饱和度 (saturation)。
  • 统计饱和度大于阈值 (saturation_threshold) 的像素占总像素的比例 (color_fraction)。
  • 如果 color_fraction 大于设定的阈值 (color_fraction_threshold),则认为图像是彩色的。
def is_color_image(image, saturation_threshold=0.35, color_fraction_threshold=0.001):image = image.convert('RGB')pixels = np.array(image) / 255.0max_rgb = np.max(pixels, axis=2)min_rgb = np.min(pixels, axis=2)delta = max_rgb - min_rgbsaturation = delta / (max_rgb + 1e-7)  # 防止除以零color_pixels = saturation > saturation_thresholdcolor_fraction = np.mean(color_pixels)return color_fraction > color_fraction_threshold

2. is_color_page 函数

功能: 检查 PDF 页面是否为彩色页面。

逻辑:

  • 将页面渲染为 pixmap 对象。
  • 将 pixmap 转换为 PNG 格式的字节数据。
  • 使用 PIL 库将字节数据转换为图像对象。
  • 调用 is_color_image 函数检查图像是否为彩色图像。
def is_color_page(page):pix = page.get_pixmap()img = pix.tobytes("png")from PIL import Imagefrom io import BytesIOimage = Image.open(BytesIO(img))return is_color_image(image)

3. split_pdf 函数

功能: 将输入的 PDF 分割为彩色页面和黑白页面两个 PDF。

逻辑:

  • 打开输入 PDF。
  • 创建新的 PDF 对象来保存彩色页面和黑白页面。
  • 遍历输入 PDF 的每一页,检查页面是否为彩色页面。
  • 如果设置了双面打印 (is_double_sized_printing),确保彩色页面的前后页也包括在内。
  • 将彩色页面和黑白页面分别插入到新的 PDF 对象中。
  • 保存新的彩色和黑白 PDF。
  • 关闭所有文档对象。
def split_pdf(input_pdf_path, output_color_pdf_path, output_bw_pdf_path, is_double_sized_printing):doc = fitz.open(input_pdf_path)color_doc = fitz.open()bw_doc = fitz.open()color_pages = []bw_pages = []for page_num in tqdm(range(len(doc))):page = doc.load_page(page_num)if is_color_page(page):color_pages.append(page_num)if is_double_sized_printing:for page_num in color_pages:if page_num % 2 == 0 and page_num + 1 not in color_pages and page_num + 1 < len(doc):color_pages.append(page_num + 1)if page_num % 2 == 1 and page_num - 1 not in color_pages and page_num - 1 > 0:color_pages.append(page_num - 1)for page_num in range(len(doc)):if page_num not in color_pages:bw_pages.append(page_num)for page_num in sorted(color_pages):color_doc.insert_pdf(doc, from_page=page_num, to_page=page_num)for page_num in sorted(bw_pages):bw_doc.insert_pdf(doc, from_page=page_num, to_page=page_num)color_doc.save(output_color_pdf_path)bw_doc.save(output_bw_pdf_path)doc.close()color_doc.close()bw_doc.close()

主程序部分

功能: 定义输入、输出文件路径和是否双面打印的参数,并调用 split_pdf 函数。

if __name__ == '__main__':INPUT_PDF_PATH = '1.pdf'OUTPUT_COLOR_PDF_PATH = 'color_pages.pdf'OUTPUT_BW_PDF_PATH = 'bw_pages.pdf'IS_DOUBLE_SIZED_PRINTING = Truesplit_pdf(INPUT_PDF_PATH, OUTPUT_COLOR_PDF_PATH, OUTPUT_BW_PDF_PATH, IS_DOUBLE_SIZED_PRINTING)

完整代码

import pymupdf as fitz
import numpy as np
from tqdm import tqdmdef is_color_image(image, saturation_threshold=0.35, color_fraction_threshold=0.001):image = image.convert('RGB')pixels = np.array(image) / 255.0  # 归一化像素值到[0,1]范围# 将RGB转换为HSVmax_rgb = np.max(pixels, axis=2)min_rgb = np.min(pixels, axis=2)delta = max_rgb - min_rgb# 饱和度saturation = delta / (max_rgb + 1e-7)  # 防止除以零# 判断饱和度大于阈值的彩色像素color_pixels = saturation > saturation_thresholdcolor_fraction = np.mean(color_pixels)return color_fraction > color_fraction_thresholddef is_color_page(page):"""Check if a page is a color page."""# Render page to a pixmappix = page.get_pixmap()# Convert pixmap to an imageimg = pix.tobytes("png")# Create an image object using PILfrom PIL import Imagefrom io import BytesIOimage = Image.open(BytesIO(img))return is_color_image(image)def split_pdf(input_pdf_path, output_color_pdf_path, output_bw_pdf_path, is_double_sized_printing):# Open the input PDFdoc = fitz.open(input_pdf_path)# Create new PDFs for color and black & white pagescolor_doc = fitz.open()bw_doc = fitz.open()# Save color and bw pages numbercolor_pages = []bw_pages = []# Iterate over each page in the input PDFfor page_num in tqdm(range(len(doc))):page = doc.load_page(page_num)# Check if the page is a color pageif is_color_page(page):color_pages.append(page_num)# Handle double sized printingif is_double_sized_printing:for page_num in color_pages:if page_num % 2 == 0 and page_num + 1 not in color_pages and page_num + 1 < len(doc):color_pages.append(page_num + 1)if page_num % 2 == 1 and page_num - 1 not in color_pages and page_num - 1 > 0:color_pages.append(page_num - 1)# Insert BW Pagesfor page_num in range(len(doc)):if page_num not in color_pages:bw_pages.append(page_num)# Insert PDF pagesfor page_num in sorted(color_pages):color_doc.insert_pdf(doc, from_page=page_num, to_page=page_num)for page_num in sorted(bw_pages):bw_doc.insert_pdf(doc, from_page=page_num, to_page=page_num)# Save the new PDFscolor_doc.save(output_color_pdf_path)bw_doc.save(output_bw_pdf_path)# Close all documentsdoc.close()color_doc.close()bw_doc.close()if __name__ == '__main__':INPUT_PDF_PATH = '1.pdf'  # 待转换的PDF路径OUTPUT_COLOR_PDF_PATH = 'color_pages.pdf'  # 彩色部分PDF输出路径OUTPUT_BW_PDF_PATH = 'bw_pages.pdf'  # 黑白部分PDF输出路径IS_DOUBLE_SIZED_PRINTING = True  # 是否双面打印split_pdf(INPUT_PDF_PATH, OUTPUT_COLOR_PDF_PATH, OUTPUT_BW_PDF_PATH, IS_DOUBLE_SIZED_PRINTING)

原文链接:http://t.csdnimg.cn/VY0dE 

代码链接:https://github.com/RicePasteM/Color-BW-Separator-for-PDF.git

http://www.yayakq.cn/news/355414/

相关文章:

  • 阿里巴巴网站建设与维护百度搜索seo优化技巧
  • WordPress建站 用插件济南网站制作套餐
  • 南通科技网站建设wordpress 文章无法显示
  • 网络品牌维护沈阳百度seo
  • 免费创建个人网站申请公司网站建站要多少钱一年
  • 网站建设电话销售技巧wordpress本地更换为网站域名
  • 兰州市城市建设设计院官方网站跨境电商定制平台
  • 陕西富通建设有限公司网站网站小图标怎么制作
  • 网站的关键词库怎么做淮南网云小镇的房子可不可以买
  • 四川省住房与城乡建设部网站上海有哪些比较好的室内设计公司
  • 优建网站php做网站知乎
  • 网站建设系统认证系统做网站怎么加弹幕
  • 网站如何做软文推广电子商务网站建设一体化教案
  • 网站空间商排行榜公众号平台官网登录
  • 企业网站制作策划书兰州网站关键字优化
  • 上海优秀网站设计微信小程序开发免费模板
  • 收款后自动发货的网站是怎么做的好网站建设公司有哪些
  • seo网站排名厂商定制wordpress 邮件模板
  • 学校后勤网站建设方案wordpress 新手
  • 做网站收费 优帮云做推广必须知道的网站
  • 网站建设美化中期报告公司网页设计免费
  • 深圳网站制作必荐祥奔科技上海哪家装修公司好
  • 网站开发客户需求文档开发一个聊天app
  • 北京欢迎你 网站建设一键生成短网址
  • 做网站深紫色搭配什么颜色做网站用什么cms
  • 特色美食网站建设策划书如何利用开源代码做网站
  • 做论坛网站需要什么备案网络营销的看法和理解
  • 纪实摄影网站推荐个人主页网页设计案例
  • 珍岛网站建设手机网站解决方案
  • 网站二级页面设计吉林教育网站建设方案