Python-Word文檔、PPT、PDF以及Pillow處理圖像詳解

Python操作Word和PowerPoint文件

操作Word文檔

命令來安裝python-docx三方庫。

pip install python-docx

from docx import Document
from docx.shared import Inches, Pt, RGBColor
from docx.enum.text import WD_ALIGN_PARAGRAPH
from docx.enum.table import WD_TABLE_ALIGNMENT
from docx.oxml.ns import qn
import matplotlib.pyplot as plt
from datetime import datetime
import iodef generate_sales_report():# 創建文檔對象doc = Document()# 設置文檔默認字體(支持中文)doc.styles['Normal'].font.name = '微軟雅黑'doc.styles['Normal']._element.rPr.rFonts.set(qn('w:eastAsia'), '微軟雅黑')# ========== 1. 添加報告標題 ==========title = doc.add_heading('2023年11月銷售分析報告', level=0)title.alignment = WD_ALIGN_PARAGRAPH.CENTERtitle_run = title.runs[0]title_run.font.size = Pt(22)title_run.font.color.rgb = RGBColor(0, 0, 139)  # 深藍色# 添加報告日期current_date = datetime.now().strftime('%Y年%m月%d日')date_para = doc.add_paragraph(f'生成日期:{current_date}')date_para.alignment = WD_ALIGN_PARAGRAPH.RIGHTdate_para.runs[0].font.size = Pt(10)date_para.runs[0].font.color.rgb = RGBColor(128, 128, 128)  # 灰色doc.add_paragraph()  # 空行# ========== 2. 添加基本信息 ==========doc.add_heading('一、基本信息', level=1)info_text = ("本月銷售報告涵蓋2023年11月1日至11月30日的銷售數據。""報告分析了平臺整體銷售情況、各品類表現、用戶購買行為等關鍵指標,""并為下月運營策略提供數據支持。")info_para = doc.add_paragraph(info_text)info_para.runs[0].font.size = Pt(12)# ========== 3. 添加銷售數據表格 ==========doc.add_heading('二、銷售數據概覽', level=1)# 模擬銷售數據sales_data = [['品類', '銷售額(萬元)', '訂單數', '同比增幅', '毛利率'],['電子產品', 1250, 8560, '12.5%', '22.3%'],['家居用品', 890, 12450, '8.7%', '28.1%'],['服裝鞋帽', 760, 21500, '15.2%', '35.4%'],['食品生鮮', 680, 18760, '23.8%', '18.9%'],['其他', 320, 5600, '-2.1%', '15.6%']]# 創建表格table = doc.add_table(rows=1, cols=len(sales_data[0]))table.style = 'Light Shading Accent 1'  # 使用內置表格樣式table.alignment = WD_TABLE_ALIGNMENT.CENTER# 添加表頭hdr_cells = table.rows[0].cellsfor i, header in enumerate(sales_data[0]):hdr_cells[i].text = headerhdr_cells[i].paragraphs[0].runs[0].font.bold = Truehdr_cells[i].paragraphs[0].alignment = WD_ALIGN_PARAGRAPH.CENTER# 添加數據行for row in sales_data[1:]:row_cells = table.add_row().cellsfor i, cell in enumerate(row):row_cells[i].text = str(cell)if i > 0:  # 非第一列數據居中row_cells[i].paragraphs[0].alignment = WD_ALIGN_PARAGRAPH.CENTERdoc.add_paragraph()  # 空行# ========== 4. 添加銷售趨勢圖 ==========doc.add_heading('三、銷售趨勢分析', level=1)# 生成一個簡單的趨勢圖(實際應用中可以從數據庫獲取真實數據)days = range(1, 31)sales = [100 + x * 5 + (x % 7) * 20 for x in days]  # 模擬每日銷售額plt.figure(figsize=(8, 4))plt.plot(days, sales, marker='o', linestyle='-', color='#1f77b4')plt.title('11月每日銷售額趨勢', fontproperties='SimHei')plt.xlabel('日期', fontproperties='SimHei')plt.ylabel('銷售額(萬元)', fontproperties='SimHei')plt.grid(True)# 將圖表保存到內存中img_stream = io.BytesIO()plt.savefig(img_stream, format='png', dpi=300)plt.close()# 將圖表添加到Word文檔img_stream.seek(0)doc.add_picture(img_stream, width=Inches(6))doc.add_paragraph('圖1:11月每日銷售額趨勢圖', style='Caption')# ========== 5. 添加關鍵指標分析 ==========doc.add_heading('四、關鍵指標分析', level=1)analysis_points = [("1. 總體表現", "本月總銷售額達到3900萬元,同比增長14.2%,環比增長8.7%。"),("2. 品類亮點", "服裝鞋帽品類表現突出,同比增長15.2%,主要得益于雙十一促銷活動。"),("3. 用戶行為", "平均客單價提升至320元,老客戶復購率提升至45.6%。"),("4. 促銷效果", "雙十一當天銷售額達580萬元,占全月銷售額的14.9%。")]for point in analysis_points:p = doc.add_paragraph()p.add_run(point[0]).bold = Truep.add_run(" " + point[1])# ========== 6. 添加結論與建議 ==========doc.add_heading('五、結論與建議', level=1)recommendations = ["1. 繼續保持服裝鞋帽品類的營銷投入,擴大競爭優勢。","2. 針對食品生鮮品類的高增長,優化供應鏈管理。","3. 分析電子產品品類增長放緩原因,調整產品結構。","4. 策劃12月年終促銷活動,重點關注老客戶喚醒。"]for rec in recommendations:doc.add_paragraph(rec, style='List Bullet')# ========== 7. 添加頁腳 ==========section = doc.sections[0]footer = section.footerfooter_para = footer.paragraphs[0]footer_para.text = "機密 - 僅限內部使用"footer_para.alignment = WD_ALIGN_PARAGRAPH.CENTERfooter_para.runs[0].font.size = Pt(9)footer_para.runs[0].font.color.rgb = RGBColor(128, 128, 128)# ========== 保存文檔 ==========report_name = f"銷售分析報告_{current_date}.docx"doc.save(report_name)print(f"報告已生成: {report_name}")if __name__ == "__main__":generate_sales_report()

生成PowerPoint

安裝名為python-pptx的三方庫,命令如下所示。

pip install python-pptx

from pptx import Presentation
from pptx.util import Inches, Pt
from pptx.dml.color import RGBColor
from pptx.enum.text import PP_ALIGN
from pptx.enum.shapes import MSO_SHAPE, MSO_CONNECTOR
from pptx.enum.text import MSO_ANCHOR
from datetime import datetime
import mathdef create_ai_evolution_ppt():# 創建演示文稿對象prs = Presentation()# ========== 1. 封面頁 ==========slide_layout = prs.slide_layouts[0]  # 標題幻燈片布局slide = prs.slides.add_slide(slide_layout)title = slide.shapes.titletitle.text = "人工智能演變歷程"title.text_frame.paragraphs[0].font.size = Pt(44)title.text_frame.paragraphs[0].font.bold = Truetitle.text_frame.paragraphs[0].font.color.rgb = RGBColor(0, 32, 96)  # 深藍色subtitle = slide.placeholders[1]subtitle.text = "從理論萌芽到變革未來\n技術發展全景解析"subtitle.text_frame.paragraphs[0].font.size = Pt(24)subtitle.text_frame.paragraphs[0].font.color.rgb = RGBColor(128, 128, 128)subtitle.text_frame.paragraphs[0].alignment = PP_ALIGN.CENTER# 添加日期和作者left = Inches(5.5)top = Inches(6.5)width = Inches(3)height = Inches(0.5)text_box = slide.shapes.add_textbox(left, top, width, height)tf = text_box.text_framep = tf.add_paragraph()p.text = f"生成日期: {datetime.now().strftime('%Y-%m-%d')}"p.font.size = Pt(12)p.font.color.rgb = RGBColor(150, 150, 150)p.alignment = PP_ALIGN.RIGHT# ========== 2. AI發展時間線 ==========slide = prs.slides.add_slide(prs.slide_layouts[1])  # 標題和內容布局title = slide.shapes.titletitle.text = "AI發展時間線"# 創建時間線圖形left = Inches(0.5)top = Inches(1.5)width = Inches(9)height = Inches(1)timeline = slide.shapes.add_shape(MSO_SHAPE.RECTANGLE, left, top, width, height / 4)timeline.fill.solid()timeline.fill.fore_color.rgb = RGBColor(0, 112, 192)# 添加時間點milestones = [(0.1, "1950s", "圖靈測試\n達特茅斯會議"),(0.35, "1980s", "專家系統\n機器學習興起"),(0.6, "1997", "深藍擊敗\n國際象棋冠軍"),(0.75, "2011", "Siri發布\n語音助手時代"),(0.9, "2023", "GPT-4\n多模態AI")]for pos, year, desc in milestones:# 時間點標記left_pos = left + width * pos - Inches(0.15)marker = slide.shapes.add_shape(MSO_SHAPE.OVAL,left_pos,top - Inches(0.15),Inches(0.3),Inches(0.3))marker.fill.solid()marker.fill.fore_color.rgb = RGBColor(237, 125, 49)  # 橙色marker.line.color.rgb = RGBColor(255, 255, 255)# 年份文本txBox = slide.shapes.add_textbox(left_pos,top - Inches(0.5),Inches(0.8),Inches(0.4))tf = txBox.text_framep = tf.add_paragraph()p.text = yearp.font.size = Pt(14)p.font.bold = Truep.alignment = PP_ALIGN.CENTER# 描述文本txBox = slide.shapes.add_textbox(left_pos - Inches(0.5),top + Inches(0.3),Inches(1.5),Inches(0.8))tf = txBox.text_framep = tf.add_paragraph()p.text = descp.font.size = Pt(12)p.alignment = PP_ALIGN.CENTER# ========== 3. 關鍵里程碑 ==========slide = prs.slides.add_slide(prs.slide_layouts[1])title = slide.shapes.titletitle.text = "AI發展關鍵里程碑"# 使用SmartArt替代圖形(實際使用中可以用真實SmartArt)milestones = [("1956", "達特茅斯會議", "AI概念正式提出"),("1997", "深藍勝利", "首次計算機擊敗國際象棋世界冠軍"),("2012", "AlexNet", "深度學習革命開始"),("2016", "AlphaGo", "擊敗圍棋冠軍李世石"),("2020", "GPT-3", "1750億參數語言模型")]left = Inches(0.5)top = Inches(1.5)width = Inches(3)height = Inches(0.8)for i, (year, event, desc) in enumerate(milestones):# 添加年份框year_box = slide.shapes.add_shape(MSO_SHAPE.ROUNDED_RECTANGLE,left,top + i * Inches(1.1),width / 3,height / 2)year_box.fill.solid()year_box.fill.fore_color.rgb = RGBColor(54, 96, 146)  # 深藍色year_box.line.color.rgb = RGBColor(255, 255, 255)tf = year_box.text_framep = tf.add_paragraph()p.text = yearp.font.size = Pt(14)p.font.color.rgb = RGBColor(255, 255, 255)p.alignment = PP_ALIGN.CENTER# 添加事件框event_box = slide.shapes.add_shape(MSO_SHAPE.RECTANGLE,left + width / 3 + Inches(0.2),top + i * Inches(1.1),width * 0.7,height)event_box.fill.solid()event_box.fill.fore_color.rgb = RGBColor(218, 238, 243)  # 淺藍色tf = event_box.text_framep = tf.add_paragraph()p.text = eventp.font.size = Pt(16)p.font.bold = Truep = tf.add_paragraph()p.text = descp.font.size = Pt(12)# ========== 4. 技術突破圖解 ==========slide = prs.slides.add_slide(prs.slide_layouts[1])title = slide.shapes.titletitle.text = "AI核心技術突破"# 添加技術演進圖(簡化版)technologies = [("規則系統", "1950s-1980s", "專家系統", RGBColor(166, 166, 166)),("機器學習", "1980s-2010s", "統計學習", RGBColor(155, 187, 89)),("深度學習", "2010s-現在", "神經網絡", RGBColor(79, 129, 189)),("大模型", "2020s-現在", "Transformer", RGBColor(247, 150, 70))]left = Inches(0.5)top = Inches(2)width = Inches(2.5)height = Inches(2)for i, (tech, period, desc, color) in enumerate(technologies):# 添加技術框tech_box = slide.shapes.add_shape(MSO_SHAPE.ROUNDED_RECTANGLE,left + i * Inches(2.5),top,width,height)tech_box.fill.solid()tech_box.fill.fore_color.rgb = colortech_box.line.color.rgb = RGBColor(255, 255, 255)tf = tech_box.text_frametf.vertical_anchor = MSO_ANCHOR.MIDDLEp = tf.add_paragraph()p.text = techp.font.size = Pt(18)p.font.bold = Truep.font.color.rgb = RGBColor(255, 255, 255)p.alignment = PP_ALIGN.CENTERp = tf.add_paragraph()p.text = periodp.font.size = Pt(14)p.font.color.rgb = RGBColor(255, 255, 255)p.alignment = PP_ALIGN.CENTERp = tf.add_paragraph()p.text = descp.font.size = Pt(12)p.font.color.rgb = RGBColor(255, 255, 255)p.alignment = PP_ALIGN.CENTER# 添加箭頭連接for i in range(len(technologies) - 1):arrow = slide.shapes.add_shape(MSO_SHAPE.RIGHT_ARROW,left + (i + 1) * Inches(2.5) - Inches(0.3),top + height / 2 - Inches(0.1),Inches(0.6),Inches(0.2))arrow.fill.solid()arrow.fill.fore_color.rgb = RGBColor(89, 89, 89)# ========== 5. 當前應用領域 ==========slide = prs.slides.add_slide(prs.slide_layouts[1])title = slide.shapes.titletitle.text = "AI當前主要應用領域"applications = [("醫療健康", "影像診斷、藥物研發", "🏥"),("金融服務", "風控、量化交易", "💳"),("智能制造", "質檢、預測性維護", "🏭"),("自動駕駛", "環境感知、路徑規劃", "🚗"),("內容創作", "AIGC、藝術創作", "🎨")]left = Inches(0.5)top = Inches(1.8)width = Inches(4)height = Inches(1.2)for i, (field, desc, emoji) in enumerate(applications):row = i % 2col = i // 2# 添加應用框app_box = slide.shapes.add_shape(MSO_SHAPE.ROUNDED_RECTANGLE,left + col * Inches(4.5),top + row * Inches(1.5),width,height)app_box.fill.solid()app_box.fill.fore_color.rgb = RGBColor(240, 240, 240)tf = app_box.text_framep = tf.add_paragraph()p.text = f"{emoji} {field}"p.font.size = Pt(18)p.font.bold = Truep = tf.add_paragraph()p.text = descp.font.size = Pt(14)# ========== 6. 未來趨勢預測 ==========slide = prs.slides.add_slide(prs.slide_layouts[1])title = slide.shapes.titletitle.text = "AI未來發展趨勢"trends = [("AGI研究", "通用人工智能探索"),("AI倫理", "可解釋性、公平性、隱私保護"),("邊緣AI", "設備端智能計算"),("AI+科學", "科學研究新范式"),("人機協作", "增強人類能力而非替代")]left = Inches(0.5)top = Inches(1.8)radius = Inches(0.4)# 添加中心主題center = slide.shapes.add_shape(MSO_SHAPE.OVAL,left + Inches(3.5) - radius,top + Inches(1.5) - radius,radius * 2,radius * 2)center.fill.solid()center.fill.fore_color.rgb = RGBColor(0, 112, 192)tf = center.text_framep = tf.add_paragraph()p.text = "AI未來"p.font.size = Pt(16)p.font.bold = Truep.font.color.rgb = RGBColor(255, 255, 255)p.alignment = PP_ALIGN.CENTER# 添加周圍趨勢節點angles = [0, 72, 144, 216, 288]  # 五等分圓distance = Inches(2.5)for i, (trend, desc) in enumerate(trends):angle = angles[i] * 3.14159 / 180x = left + Inches(3.5) + distance * math.cos(angle) - radiusy = top + Inches(1.5) + distance * math.sin(angle) - radiusnode = slide.shapes.add_shape(MSO_SHAPE.OVAL,x,y,radius * 2,radius * 2)node.fill.solid()node.fill.fore_color.rgb = RGBColor(237, 125, 49)tf = node.text_framep = tf.add_paragraph()p.text = trendp.font.size = Pt(14)p.font.bold = Truep.font.color.rgb = RGBColor(255, 255, 255)p.alignment = PP_ALIGN.CENTER# 添加連接線 - 修復這里line = slide.shapes.add_connector(MSO_CONNECTOR.STRAIGHT,  # 修改為正確的連接線類型left + Inches(3.5),top + Inches(1.5),x + radius,y + radius)line.line.width = Pt(1.5)line.line.color.rgb = RGBColor(150, 150, 150)# 添加描述文本框desc_box = slide.shapes.add_textbox(x - Inches(0.5) if angle < 3.14159 else x + Inches(0.5),y + radius * 2,Inches(1.5),Inches(0.8))tf = desc_box.text_framep = tf.add_paragraph()p.text = descp.font.size = Pt(12)p.alignment = PP_ALIGN.CENTER# ========== 7. 結束頁 ==========slide = prs.slides.add_slide(prs.slide_layouts[5])  # 空白布局left = Inches(1)top = Inches(2)width = Inches(8)height = Inches(2)# 添加結束語text_box = slide.shapes.add_textbox(left, top, width, height)tf = text_box.text_framep = tf.add_paragraph()p.text = "人工智能的演變仍在繼續..."p.font.size = Pt(36)p.font.bold = Truep.font.color.rgb = RGBColor(0, 32, 96)p.alignment = PP_ALIGN.CENTERp = tf.add_paragraph()p.text = "準備好迎接AI驅動的未來了嗎?"p.font.size = Pt(24)p.font.color.rgb = RGBColor(128, 128, 128)p.alignment = PP_ALIGN.CENTER# 添加公司/作者信息left = Inches(3)top = Inches(6)width = Inches(4)height = Inches(0.5)text_box = slide.shapes.add_textbox(left, top, width, height)tf = text_box.text_framep = tf.add_paragraph()p.text = "? 2023 AI趨勢分析團隊"p.font.size = Pt(12)p.font.color.rgb = RGBColor(150, 150, 150)p.alignment = PP_ALIGN.CENTER# ========== 保存PPT ==========ppt_name = f"AI演變歷程_{datetime.now().strftime('%Y%m%d')}.pptx"prs.save(ppt_name)print(f"PPT已生成: {ppt_name}")if __name__ == "__main__":create_ai_evolution_ppt()

Python操作PDF文件

PDF 是 Portable Document Format 的縮寫,這類文件通常使用.pdf作為其擴展名。

從PDF中提取文本

在 Python 中,可以使用名為PyPDF2的三方庫來讀取 PDF 文件

pip install PyPDF2
pip install reportlab

PyPDF2沒有辦法從 PDF 文檔中提取圖像、圖表或其他媒體,但它可以提取文本,并將其返回為 Python 字符串。創建 PDF 文檔需要三方庫reportlab的支持

import os
from PyPDF2 import PdfReader, PdfWriter, PdfMerger
from reportlab.pdfgen import canvas
from reportlab.lib.pagesizes import letter
from io import BytesIOfrom reportlab.pdfbase import pdfmetrics
from reportlab.pdfbase.cidfonts import UnicodeCIDFontdef create_holiday_announcement(output_path):"""創建公司放假公告PDF(使用 ReportLab 內置中文字體)"""# 注冊 ReportLab 內置的亞洲字體pdfmetrics.registerFont(UnicodeCIDFont("STSong-Light"))  # 宋體# 創建PDFpacket = BytesIO()c = canvas.Canvas(packet, pagesize=letter)# 設置中文字體c.setFont("STSong-Light", 12)  # 使用注冊的中文字體# 添加中文內容text = c.beginText(100, 650)text.textLines("""尊敬的全體員工:根據國家法定節假日安排,結合公司實際情況,現將2023年春節放假安排通知如下:1. 放假時間:2023年1月21日(星期六)至2023年1月27日(星期五),共7天。2. 1月28日(星期六)、1月29日(星期日)正常上班。3. 請各部門提前安排好工作,做好節前安全檢查。4. 放假期間,請保持通訊暢通,如有緊急情況及時聯系相關負責人。祝大家春節愉快,闔家幸福!人事行政部2023年1月10日""")c.drawText(text)c.save()packet.seek(0)with open(output_path, "wb") as f:f.write(packet.getvalue())print(f"已創建放假公告PDF文件: {output_path}")def encrypt_pdf(input_path, output_path, password):"""加密PDF文件"""reader = PdfReader(input_path)writer = PdfWriter()# 添加所有頁面到writerfor page in reader.pages:writer.add_page(page)# 加密PDFwriter.encrypt(password)# 寫入輸出文件with open(output_path, "wb") as f:writer.write(f)print(f"已加密PDF文件并保存為: {output_path} (密碼: {password})")def add_watermark(input_path, output_path, watermark_text):"""為PDF添加文字水印"""reader = PdfReader(input_path)writer = PdfWriter()# 注冊 ReportLab 內置的亞洲字體pdfmetrics.registerFont(UnicodeCIDFont("STSong-Light"))  # 宋體# 創建水印PDFwatermark_packet = BytesIO()c = canvas.Canvas(watermark_packet, pagesize=letter)c.setFont("STSong-Light", 50)c.setFillColorRGB(0.8, 0.8, 0.8)  # 淺灰色c.rotate(45)  # 旋轉45度c.drawString(150, 50, watermark_text)  # 水印文字c.save()watermark_packet.seek(0)watermark_reader = PdfReader(watermark_packet)watermark_page = watermark_reader.pages[0]# 為每一頁添加水印for page in reader.pages:page.merge_page(watermark_page)writer.add_page(page)# 寫入輸出文件with open(output_path, "wb") as f:writer.write(f)print(f"已添加水印并保存為: {output_path}")def batch_add_watermark(input_dir, output_dir, watermark_text):"""批量添加水印"""if not os.path.exists(output_dir):os.makedirs(output_dir)for filename in os.listdir(input_dir):if filename.endswith(".pdf"):input_path = os.path.join(input_dir, filename)output_path = os.path.join(output_dir, f"watermarked_{filename}")add_watermark(input_path, output_path, watermark_text)print(f"已完成批量添加水印,輸出目錄: {output_dir}")def merge_pdfs(input_paths, output_path):"""合并多個PDF文件"""merger = PdfMerger()for path in input_paths:merger.append(path)merger.write(output_path)merger.close()print(f"已合并PDF文件并保存為: {output_path}")def read_pdf_metadata(input_path):"""讀取PDF元數據"""reader = PdfReader(input_path)metadata = reader.metadataprint("\nPDF文件元數據:")print(f"標題: {metadata.get('/Title', '無')}")print(f"作者: {metadata.get('/Author', '無')}")print(f"創建者: {metadata.get('/Creator', '無')}")print(f"創建日期: {metadata.get('/CreationDate', '無')}")print(f"修改日期: {metadata.get('/ModDate', '無')}")print(f"頁數: {len(reader.pages)}")def main():# 1. 創建放假公告PDFannouncement_file = "holiday_announcement.pdf"create_holiday_announcement(announcement_file)# 2. 讀取PDF元數據read_pdf_metadata(announcement_file)## # 3. 加密PDFencrypted_file = "encrypted_holiday_announcement.pdf"encrypt_pdf(announcement_file, encrypted_file, "company123")## # 4. 添加水印watermarked_file = "watermarked_holiday_announcement.pdf"add_watermark(announcement_file, watermarked_file, "公司機密")## # 5. 批量添加水印(示例)# # 首先創建一些示例PDFsample_files = ["sample1.pdf", "sample2.pdf"]for i, filename in enumerate(sample_files, 1):create_holiday_announcement(filename)## # 創建輸入輸出目錄if not os.path.exists("input_pdfs"):os.makedirs("input_pdfs")if not os.path.exists("output_pdfs"):os.makedirs("output_pdfs")## # 移動示例PDF到輸入目錄for filename in sample_files:os.rename(filename, os.path.join("input_pdfs", filename))## # 批量添加水印batch_add_watermark("input_pdfs", "output_pdfs", "內部文件")## # 6. 合并PDFmerged_file = "merged_documents.pdf"merge_pdfs([announcement_file, watermarked_file], merged_file)print("\n所有操作已完成!")if __name__ == "__main__":main()

?Python處理圖像

入門知識

  1. 顏色。如果你有使用顏料畫畫的經歷,那么一定知道混合紅、黃、藍三種顏料可以得到其他的顏色,事實上這三種顏色就是美術中的三原色,它們是不能再分解的基本顏色。在計算機中,我們可以將紅、綠、藍三種色光以不同的比例疊加來組合成其他的顏色,因此這三種顏色就是色光三原色。在計算機系統中,我們通常會將一個顏色表示為一個 RGB 值或 RGBA 值(其中的 A 表示 Alpha 通道,它決定了透過這個圖像的像素,也就是透明度)。

名稱

RGB值

名稱

RGB值

White(白)

(255, 255, 255)

Red(紅)

(255, 0, 0)

Green(綠)

(0, 255, 0)

Blue(藍)

(0, 0, 255)

Gray(灰)

(128, 128, 128)

Yellow(黃)

(255, 255, 0)

Black(黑)

(0, 0, 0)

Purple(紫)

(128, 0, 128)

  1. 像素。對于一個由數字序列表示的圖像來說,最小的單位就是圖像上單一顏色的小方格,這些小方塊都有一個明確的位置和被分配的色彩數值,而這些一小方格的顏色和位置決定了該圖像最終呈現出來的樣子,它們是不可分割的單位,我們通常稱之為像素(pixel)。每一個圖像都包含了一定量的像素,這些像素決定圖像在屏幕上所呈現的大小,大家如果愛好拍照或者自拍,對像素這個詞就不會陌生。

用Pillow處理圖像

Pillow 是由從著名的 Python 圖像處理庫 PIL 發展出來的一個分支,通過 Pillow 可以實現圖像壓縮和圖像處理等各種操作。可以使用下面的命令來安裝 Pillow。

pip install pillow
from PIL import Image# 讀取圖像獲得Image對象
image = Image.open('a.jpeg')
# 通過Image對象的format屬性獲得圖像的格式
print(image.format) # JPEG
# 通過Image對象的size屬性獲得圖像的尺寸
print(image.size)   # (500, 750)
# 通過Image對象的mode屬性獲取圖像的模式
print(image.mode)   # RGB
# 通過Image對象的show方法顯示圖像
# image.show()# 剪裁圖像
# 通過Image對象的crop方法指定剪裁區域剪裁圖像
# image.crop((80, 20, 310, 360)).show()# 生成縮略圖
# 通過Image對象的thumbnail方法生成指定尺寸的縮略圖
image.thumbnail((128, 128))
image.show()# 旋轉和翻轉
image = Image.open('a.jpeg')
# 使用Image對象的rotate方法實現圖像的旋轉
image.rotate(45).show()
# 使用Image對象的transpose方法實現圖像翻轉
# Image.FLIP_LEFT_RIGHT - 水平翻轉
# Image.FLIP_TOP_BOTTOM - 垂直翻轉
image.transpose(Image.FLIP_TOP_BOTTOM).show()# 操作像素
for x in range(80, 310):for y in range(20, 360):# 通過Image對象的putpixel方法修改圖像指定像素點image.putpixel((x, y), (128, 128, 128))
image.show()# 濾鏡效果
from PIL import ImageFilter# 使用Image對象的filter方法對圖像進行濾鏡處理
# ImageFilter模塊包含了諸多預設的濾鏡也可以自定義濾鏡
image.filter(ImageFilter.CONTOUR).show()

Pillow繪圖

Pillow 中有一個名為ImageDraw的模塊,該模塊的Draw函數會返回一個ImageDraw對象,通過ImageDraw對象的arclinerectangleellipsepolygon等方法,可以在圖像上繪制出圓弧、線條、矩形、橢圓、多邊形等形狀,也可以通過該對象的text方法在圖像上添加文字。

from PIL import Image, ImageDraw, ImageFont# 創建一個新的空白圖像 (800x600 像素,白色背景)
width, height = 800, 600
image = Image.new('RGB', (width, height), 'white')# 創建一個可以在圖像上繪制的 Draw 對象
draw = ImageDraw.Draw(image)# 1. 繪制矩形 (紅色邊框,不填充)
draw.rectangle([50, 50, 250, 200], outline='red', width=3)# 2. 繪制填充矩形 (藍色填充)
draw.rectangle([300, 50, 500, 200], fill='blue')# 3. 繪制橢圓 (綠色邊框,黃色填充)
draw.ellipse([50, 250, 250, 400], outline='green', fill='yellow', width=2)# 4. 繪制線條 (紫色,5像素寬)
draw.line([300, 250, 500, 400], fill='purple', width=5)# 5. 繪制多邊形 (橙色邊框,淺藍色填充)
points = [(550, 50), (700, 150), (650, 300), (500, 250)]
draw.polygon(points, outline='orange', fill='lightblue', width=2)# 6. 繪制圓弧 (紅色,從30度到270度)
draw.arc([50, 450, 250, 550], start=30, end=270, fill='red', width=3)# 7. 添加文字 (需要指定字體)
try:# 嘗試加載系統字體font = ImageFont.truetype("arial.ttf", 24)
except:# 如果找不到字體,使用默認字體font = ImageFont.load_default()draw.text((300, 450), "Hello, Pillow!", fill='black', font=font)# 8. 添加大號彩色文字 (使用不同顏色)
large_font = ImageFont.truetype("arial.ttf", 40) if font != ImageFont.load_default() else ImageFont.load_default()
draw.text((300, 500), "ImageDraw Demo", fill=(255, 0, 128), font=large_font)# 保存圖像
image.save('draw_demo.png')
print("圖像已保存為 draw_demo.png")# 顯示圖像
image.show()

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/89754.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/89754.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/89754.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

高可擴展屬性建模設計:架構師的全局思考與落地方案

在復雜業務系統中&#xff0c;動態屬性擴展始終是架構設計的核心難題之一。傳統方案如寬表設計和EAV&#xff08;實體-屬性-值&#xff09;模型分別在性能與擴展性上各有優勢與劣勢&#xff0c;但也都有明顯局限。 為了兼顧性能、擴展性、維護成本&#xff0c;需要引入更靈活的…

數據結構入門:鏈表

鏈式存儲結構通過使用指針將分散的存儲單元鏈接起來&#xff0c;每個元素由數據部分和指針部分組成。 鏈式表的定義和特點 鏈式表的每個節點包含兩個部分&#xff1a; 數據域&#xff1a;存儲數據元素。指針域&#xff1a;存儲下一個節點的內存地址。 鏈式表的頭指針指向第一個…

達夢數據庫DMHS介紹及安裝部署

目錄 概述 安裝規劃 安裝步驟 上傳安裝包 更改權限 執行安裝命令 源端和目的端處理 開啟歸檔 開啟邏輯日志 創建測試表 生成測試數據 配置目的端文件 配置源端文件 啟動目的端 啟動源端 裝載數據 源端開啟cpt模塊 數據同步驗證 隨機數據驗證 概述 達夢數據實時同…

BERT 模型詳解:結構、原理解析

前言 在自然語言處理&#xff08;NLP&#xff09;領域&#xff0c;BERT&#xff08;Bidirectional Encoder Representations from Transformers&#xff09;已經成為理解類任務的標配模型。相比 GPT 更擅長文本生成&#xff0c;BERT 則在語言理解任務上展現出卓越的能力。本文…

一、bfv_basics

目錄 一、加密參數 EncryptionParameters類1. 三個重要的參數2. 參數的作用3. 同態加密方案4. 多項式模數的度 poly_modulus_degree (n)5. 密文模數 coeff_modulus (q)6. 明文模數 plain_modulus (t&#xff0c;這是 BFV 方案才有的&#xff0c;CKKS 沒有) 二、上下文 SEALCont…

AI大模型LangChain架構介紹及其在環保領域的應用

1.LangChain 概述與架構 LangChain 是一個面向大型語言模型&#xff08;LLM&#xff09;應用的開發框架&#xff0c;其核心理念是將復雜的基于語言的 AI 系統拆分為可復用的模塊&#xff0c;簡化 LLM 與數據源的集成。LangChain 官方文檔將其定義為“一個用于開發以 LLM 為驅動…

centos 7 安裝NVIDIA Container Toolkit

要在 CentOS 7 上離線安裝 NVIDIA Container Toolkit&#xff0c;需確保已安裝 NVIDIA 驅動和 Docker 環境。以下是完整步驟及注意事項&#xff1a; ?? 一、環境準備 驗證 NVIDIA 驅動 運行 nvidia-smi 確認驅動已正確安裝&#xff0c;若未安裝需先離線安裝驅動&#xff1a; …

C++學習之STL學習:list的使用

本篇我們將學習STL中list的使用 目錄 list的初始和官方文檔 list的官方文檔 list的構造與析構 構造函數 析構函數 運算符重載 迭代器 正向迭代器 反向迭代器 const正向迭代器 const反向迭代器 容量 empty size max_size 訪問 訪問第一個元素?編輯 訪問最后一個元素 修…

USB服務器在證券公司虛擬化進程中的應用分析

在證券公司全面擁抱虛擬化、云化的技術浪潮中&#xff0c;一個看似微小卻至關重要的環節曾長期阻礙進程&#xff1a;分散在各業務環節的銀行前置機U盾、各種系統認證Ukey等物理USB安全設備的管理難題。這些承載著資金劃撥、交易認證核心權限的“小鑰匙”&#xff0c;在傳統模式…

網閘內部架構設計:分層與微服務的生死博弈

引言 “物理隔離是網閘的命脈,而架構設計決定其生死。” 在數據安全領域,網閘(安全隔離與信息交換系統)是守護核心網絡的鋼鐵長城。但當開發者試圖將現代架構思想(如微服務)引入其內部時,卻可能引發災難性沖突。本文通過深度拆解分層架構與微服務在網閘中的適用性,揭示…

通過MaaS平臺免費使用大模型API

文章目錄 一、引言&#xff1a;MaaS平臺——免費使用大模型API的新選擇二、模型代碼與限制術語詳解&#xff08;一&#xff09;模型代碼含義解析&#xff08;二&#xff09;模型使用限制術語縮寫詳解 三、5個MaaS平臺詳細介紹&#xff08;一&#xff09;OpenRouter&#xff08;…

進程代理單窗口單IP技術:原理、應用與實現

“在當今數字化時代&#xff0c;網絡隱私保護與多賬號管理需求日益增長。單窗口單IP技術通過為每個進程分配獨立網絡身份&#xff0c;巧妙地解決了多賬號管理中的IP關聯難題。從游戲多開防封到數據采集優化&#xff0c;從隱私保護到測試驗證&#xff0c;這項技術的應用場景不斷…

Java教程——線程池和future

Future 詳解 1. Future 是什么? Future 是 Java 中的一個接口(java.util.concurrent.Future),代表異步計算的未來結果。它允許你: 提交任務后立即返回在需要時檢查任務是否完成獲取任務結果(完成后)取消任務2. 怎么使用 Future? 通過線程池提交任務: ExecutorServ…

洛谷P1351 [NOIP 2014 提高組] 聯合權值

洛谷P1351 [NOIP 2014 提高組] 聯合權值 洛谷題目傳送門 題目背景 NOIP2014 提高組 D1T2 題目描述 無向連通圖 G G G 有 n n n 個點&#xff0c; n ? 1 n-1 n?1 條邊。點從 1 1 1 到 n n n 依次編號,編號為 i i i 的點的權值為 W i W_i Wi?&#xff0c;每條邊的長…

Apache Doris Profile 深度解析:從獲取到分析,解鎖查詢性能優化密碼

在 Doris 數據庫中&#xff0c;高效的查詢性能是數據處理的關鍵。當我們遇到查詢緩慢、資源消耗異常等問題時&#xff0c;Doris 提供的 Profile 工具就如同一位 “性能偵探”&#xff0c;能幫我們抽絲剝繭&#xff0c;找到問題根源。今天&#xff0c;我們就來深入聊聊如何分析 …

系統架構師

硬件&#xff1a; 運算器&#xff1a;1&#xff09;算術運算 加減乘除 2&#xff09;邏輯運算并進行邏輯測試&#xff1a;與或非 組件功能&#xff1a;算術邏輯單元ALU :處理數據 實現對數據的算術運算和邏輯運算 累加寄存器AC 通用寄存器&#xff0c;alu提供工作區 暫存運算結…

Unity HDRP + Azure IoT 工業設備監控系統實例

Unity HDRP Azure IoT 工業設備監控系統實例 下面是一個完整的工業設備監控解決方案&#xff0c;結合Unity HDRP&#xff08;高清渲染管線&#xff09;的高質量可視化與Azure IoT的實時數據處理能力。 系統架構 #mermaid-svg-XJnD6acrBbtbqYHW {font-family:"trebuchet…

(超詳細)數據庫項目初體驗:使用C語言連接數據庫完成短地址服務(本地運行版)

數據庫項目初體驗&#xff1a;使用C語言連接數據庫完成短地址服務&#xff08;本地運行版&#xff09; 前言&#xff1a;初學者的思考 作為一個剛初學數據庫的小白并且在之前我的博客中我有嘗試使用C語言寫過一個短地址服務&#xff0c;但是使用C語言編寫的短地址服務只有短記…

mysql基礎(一)快速上手篇

連接mysql 使用命令行窗口連接mysql數據庫 語法&#xff1a;mysql –h主機名 –u用戶名 –p密碼 說明&#xff1a;-h參數指定數據庫ip&#xff0c;本地服務器可以用localhost&#xff0c;-u參數指定用戶名&#xff0c;-p參數指定用戶密碼。 注意&#xff1a;-p和密碼值之間…

IntelliJ IDEA 2025- 下載安裝教程圖文版詳細教程(附激活碼)

目錄 寫在前面 一、介紹 二、下載 三、安裝 &#x1f3c1; 寫在最后 寫在前面 > &#x1f680; 初學 Java&#xff1f;或者剛開始寫項目&#xff0c;不知道該選哪個 IDE&#xff1f; 本篇教程手把手教你安裝 IntelliJ IDEA —— JetBrains 出品的頂級 Java 開發環境&a…