【教学类-71-01】20240802蔬菜切切乐01

news2024/9/21 18:59:06

背景需求:

✂️自制教具分享✂️蔬菜切切乐(剪纸) - 小红书 (xiaohongshu.com)icon-default.png?t=N7T8https://www.xiaohongshu.com/explore/65bf6809000000001100fa53?app_platform=android&ignoreEngage=true&app_version=8.46.0&share_from_user_hidden=true&xsec_source=app_share&type=normal&xsec_token=CB_Ij8DE9ljRqsEPu16HLt-ouz2dPScv_B4xJTuWWDmq8=&author_share=1&xhsshare=WeixinSession&shareRedId=ODszMTs4Nk82NzUyOTgwNjg3OTlHS0xC&apptime=1722585691&share_id=d02fdbd57f4342cb92275c6c4497f94d

我也想做这款个别化学习材料

星火讯飞下载长条形的蔬菜

下载后筛选一下,保留好看的

把一些不好看的、超过边缘的图案剔除

首先把要制作虚线的图片放在第一个文件内

图片的背景色并不都是白色

复制一个修图文件

用PS把,每个图片的背景填充为白色(255,255,255)

现在修改过的图片都是白色背景了

第一步代码:切割虚线

'''
蔬菜切切切(一),添加10条虚线
星火讯飞、阿夏
2024年8月2日
'''
from PIL import Image, ImageDraw

import os
from PIL import Image

path = r'C:\Users\jg2yXRZ\OneDrive\桌面\长条蔬菜'
old_path=path+r'\01图片背景修图'
new_path=path+r'\02虚线'
os.makedirs(new_path,exist_ok=True)

image_list = [os.path.join(root, file) for root, dirs, files in os.walk(old_path) for file in files if file.lower().endswith(('.png', '.jpg', '.jpeg'))]

print(image_list)
n=1
for b in image_list:
    # 打开图像文件
    image = Image.open(b)
    # 创建一个绘图对象
    draw = ImageDraw.Draw(image)

    # 计算方块的位置和大小
    block_width = 1280
    block_height = 30
    canvas_width, canvas_height = image.size
    block_x = (canvas_width - block_width) // 2

    df=10
    block_y_list = []
    for i in range(1, df+1):
        block_y = canvas_height // 10 * i
        block_y_list.append(block_y)

    for block_y in block_y_list:
        # 设置浅灰色(半透明)
        gray = (255, 255, 255, 128)

        # 在指定位置绘制方块
        draw.rectangle([(block_x, block_y), (block_x + block_width, block_y + block_height)], fill=gray)

        # 设置虚线的颜色、间隔和粗细
        dash_color = (0, 0, 0)  # 黑色虚线
        dash_length = 30 # 增加虚线的长度
        gap_length = 30 # 虚线的间隙长度
        line_width = 10  # 设置虚线的粗细

        # 计算虚线的起始和结束坐标
        start_x = block_x
        end_x = block_x + block_width
        start_y = block_y + block_height // 2
        end_y = start_y

        # 画横向虚线
        for x in range(start_x, end_x, dash_length + gap_length):
            draw.line([(x, start_y), (min(x + dash_length, end_x), start_y)], fill=dash_color, width=line_width)

    # 保存修改后的图片
    image.save(new_path + fr"\{b[-9:]}")
    # image.save(new_path + fr"\{n:02d}.png")
    n+=1

# import shutil
# shutil.rmtree(new_path)

在长条9:16图上10等分虚线

 但是我只希望蔬菜图案部分有虚线,白色背景不需要虚线.

所有需要对修改过的PS图片进行提取,

“打开一张已存在的图片,保留里面的白色,把非白色部分变成透明色,另存为png图片”

第二个代码:提取白色背景,制作透明png

'''
蔬菜切切切(二),提取白色透明图层
星火讯飞、阿夏
2024年8月2日
'''

from PIL import Image
import os

def get_rgb_at_coordinates(image_path, coordinates):
    image = Image.open(image_path)
    r, g, b = image.getpixel(coordinates)
    return r, g, b

def process_images_in_folder(folder_path):
    for file_name in os.listdir(folder_path):
        if file_name.lower().endswith(('.png', '.jpg', '.jpeg')):
            image_path = os.path.join(folder_path, file_name)
            r, g, b = get_rgb_at_coordinates(image_path, (710, 1270))
            print(f"Image: {file_name}, Coordinates (710, 1270), RGB: ({r}, {g}, {b})")

            # 打开图片并转换为RGBA模式
            image = Image.open(image_path).convert("RGBA")
            width, height = image.size

            # 遍历图片的每个像素点
            for x in range(width):
                for y in range(height):
                    # 获取当前像素点的RGB值
                    current_r, current_g, current_b, current_a = image.getpixel((x, y))
                    # 如果当前像素点的RGB值与指定坐标点的RGB值不同,则将其透明度设置为0(透明)
                    if (current_r, current_g, current_b) != (r, g, b):
                        image.putpixel((x, y), (current_r, current_g, current_b, 0))

            # 保存处理后的图片为PNG格式
            output_path = os.path.join(new_path, f"{file_name}")
            image.save(output_path, "PNG")

path=r'C:\Users\jg2yXRZ\OneDrive\桌面\长条蔬菜'
folder_path = path+r'\01图片背景修图'
new_path=path+r'\03白色'
os.makedirs(new_path,exist_ok=True)
process_images_in_folder(folder_path)

第三步:把白色透明图片覆盖在虚线图片上

'''
蔬菜切切切(三),透明图层覆盖在虚线图上
星火讯飞、阿夏
2024年8月2日
'''
import os
from PIL import Image

path = r'C:\Users\jg2yXRZ\OneDrive\桌面\长条蔬菜'
folder1 = path + r'\02虚线'
folder2 = path + r'\03白色'
folder3 = path + r'\04合并'

if not os.path.exists(folder3):
    os.makedirs(folder3)

image_files1 = sorted(os.listdir(folder1))
image_files2 = sorted(os.listdir(folder2))

for image_file1, image_file2 in zip(image_files1, image_files2):
    image1_path = os.path.join(folder1, image_file1)
    image2_path = os.path.join(folder2, image_file2)

    image1 = Image.open(image1_path).convert('RGBA')
    image2 = Image.open(image2_path).convert('RGBA')

    combined_image = Image.alpha_composite(image1, image2)

    combined_image.save(os.path.join(folder3, f'{image_file1}'))

第4步,合并制作pdf学具

'''
蔬菜切切切(四),3张一个A4 PDF
星火讯飞、阿夏
2024年8月2日
'''

import os,time
import shutil
from docx import Document
from docx.shared import Cm
from PIL import Image
from PyPDF2 import PdfFileMerger, PdfFileReader

from PIL import Image, ImageDraw, ImageFont
import os,random

print('----1、蔬菜图片左上右下加扑克牌数字------------')
path = r'C:\Users\jg2yXRZ\OneDrive\桌面\长条蔬菜'
image_folder = path + r'\04合并'

image_files = [f for f in os.listdir(image_folder) if f.endswith('.jpg') or f.endswith('.png')]

# 将图片拆成6个一组
grouped_files = [image_files[i:i + 3] for i in range(0, len(image_files), 6)]
print(len(grouped_files))

# 创建临时文件夹
new_folder = path+r'\零时文件夹'
os.makedirs(new_folder, exist_ok=True)


# 处理每一组图片
for group_index, group in enumerate(grouped_files):
    # 创建新的Word文档
    doc = Document(path+r'\蔬菜.docx')
    # print(group)
    
    # 遍历每个单元格,并插入图片
    for cell_index, image_file in enumerate(group):
        # 计算图片长宽(单位:厘米)
    
        # 插入图片到单元格
        table = doc.tables[0]
        cell = table.cell(int(cell_index / 3), cell_index % 3)
        # 如果第一行有4个格子,两个数字都写4
        cell_paragraph = cell.paragraphs[0]
        cell_paragraph.clear()
        run = cell_paragraph.add_run()
        run.add_picture(os.path.join(image_folder, image_file), width=Cm(9.42), height=Cm(19.54))
        
    # 保存Word文档
    doc.save(os.path.join(new_folder, f'{group_index + 1:03d}.docx'))
    time.sleep(3)


# 将10个docx转为PDF
import os
from docx2pdf import convert
from PyPDF2 import PdfFileMerger

pdf_output_path = path+fr'\\01长条蔬菜切切切{int(len(grouped_files))}张共{len(image_files)}图.pdf'

# 将所有DOCX文件转换为PDF
for docx_file in os.listdir(new_folder):
    if docx_file.endswith('.docx'):
        docx_path = os.path.join(new_folder, docx_file)
        convert(docx_path, docx_path.replace('.docx', '.pdf'))


# 合并零时文件里所有PDF文件
merger = PdfFileMerger()
for pdf_file in os.listdir(new_folder):
    if pdf_file.endswith('.pdf'):
        pdf_path = os.path.join(new_folder, pdf_file)
        merger.append(pdf_path)
time.sleep(2)

# 保存合并后的PDF文件
merger.write(pdf_output_path)
merger.close()


# 删除输出文件夹

shutil.rmtree(new_folder)
shutil.rmtree(image_folder )
# shutil.rmtree(new)
time.sleep(2)

其他说明:

如果发现最后,白色背景没有覆盖背景,说明,修图时没有把背景颜色都改成白色(255,255,255),需要到ps里面重新统一背景颜色。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1973232.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

mybatis保存postgresql数组格式数据

新建表的时候在int4后加上[]中括号就行 -- 创建数组 SELECT ARRAY[1, 2, 3, 4, 5];-- 访问数组元素(从1开始) SELECT ARRAY[1, 2, 3, 4, 5][1]; -- 返回 1-- 数组长度 SELECT array_length(ARRAY[1, 2, 3, 4, 5], 1); -- 返回 5-- 数组连接 SELECT ARRA…

C语言 | Leetcode C语言题解之第316题去除重复字母

题目&#xff1a; 题解&#xff1a; char* removeDuplicateLetters(char* s) {int vis[26], num[26];memset(vis, 0, sizeof(vis));memset(num, 0, sizeof(num));int n strlen(s);for (int i 0; i < n; i) {num[s[i] - a];}char* stk malloc(sizeof(char) * 27);int stk…

Linux软件编程

8月1日学习了最后的标准IO&#xff0c;流的偏移。然后进入了文件IO的学习&#xff0c;包括文件的打开、读写、关闭以及偏移。之后又学习了剩余的一些函数接口&#xff0c;可以对文件进行一些其余操作。 8月2日学习了目录文件和链接文件的操作。目录文件的操作包括目录的创建、…

8月17日|广州|Cocos开发者沙龙不见不散!

6月底举行的Cocos成都沙龙吸引了近200位开发者和10多家发行&#xff0c;得到了大家的一致好评。 Cocos广州沙龙即将到来&#xff0c;会邀请更多KOL和头部发行、渠道嘉宾分享行业经验&#xff0c;让大家实现技术干货、游戏合作、行业信息多丰收。 活动主题&#xff1a;小游戏与出…

二叉树构建(从3种遍历中构建)python刷题记录

R3-树与二叉树篇. 目录 从前序与中序遍历序列构造二叉树 算法思路&#xff1a; 灵神套路 从中序与后序遍历序列构造二叉树 算法思路&#xff1a; 灵神套路 从前序和后序遍历序列构造二叉树 算法思路&#xff1a; 灵神套路 从前序与中序遍历序列构造二叉树 算法…

请你学习:前端布局2 - 定位(Positioning)是一种重要的布局技术

在页面布局中&#xff0c;定位&#xff08;Positioning&#xff09;是一种重要的布局技术&#xff0c;它允许我们精确地控制元素在页面上的位置。定位模式、是否脱标以及移动位置是理解定位的三个关键方面。 1 定位模式 定位模式决定了元素在文档中的定位方式&#xff0c;通过…

一款完全免费的数据恢复软件

WinFR&#xff0c;Windows文件恢复&#xff08;微软命令行程序&#xff09;的免费图形界面&#xff0c;帮您轻松恢复文件。WinFR是免费的Windows数据恢复替代方案&#xff0c;支持U盘数据恢复、硬盘数据恢复、存储卡数据恢复、文件数据恢复等功能。WinFR完全调用Windows文件恢复…

简单的docker学习 第2章docker引擎

第2章docker引擎 2.1Docker 引擎发展历程 2.1.1 首发版本架构 Docker 在首次发布时&#xff0c;其引擎由两个核心组件构成&#xff1a;LXC&#xff08;Linux Container&#xff09;与 Docker Daemon。不过&#xff0c;该架构依赖于 LXC&#xff0c;使得 Docker 存在严重的问…

第一百八十六节 Java XML教程 - Java DOM编辑

Java XML教程 - Java DOM编辑 属性 以下代码显示如何向元素添加属性。 import java.io.StringWriter;import javax.xml.parsers.DocumentBuilder; import javax.xml.parsers.DocumentBuilderFactory; import javax.xml.transform.OutputKeys; import javax.xml.transform.Tr…

【OS】AUTOSAR OS Spinlock实现原理(下篇)

目录 3.1 Spinlock配置代码 3.1.1 Os_SpinlockConfigType_Tag 3.1.2 Os_LockConfigType_Tag 3.1.3 不同配置参数对配置代码生成的影响 3.2 Os_GetSpinlock详解 3.2.1 Os_SpinlockIsNotLockedLocal 3.2.2 Os_SpinlockIsLockOrderValid 3.2.3 Os_SpinlockSuspendByMethod…

bias偏置项(bias term)

bias偏置项&#xff08;bias term&#xff09;或者称为截距项&#xff08;intercept term&#xff09; 简称b 它其实就是函数的截距&#xff0c;与线性方程y wx b中的b的意义是一样的。 在y wx b中&#xff0c;b表示函数在y轴上的截距&#xff0c;控制着函数偏离原点的距…

食品安全知识竞赛规则及流程方案

活动简介 本届竞赛以“反食品浪费”为主线&#xff0c;在专业知识比拼基础上&#xff0c;融入了食物贮存方法、标签标识认知等生活化场景&#xff0c;将科普知识与日常生活紧密结合&#xff0c;更深入地践行“以赛促学 以学促行”的比赛口号&#xff0c;旨在通过大学生群体带动…

vue3集成LuckySheet实现导入本地Excel进行在线编辑,以及导出功能

第一步&#xff1a;克隆或者下载下面的代码 git clone https://github.com/dream-num/Luckysheet.git第二步&#xff1a;安装依赖 npm install npm install gulp -g 第三步&#xff1a;运行 npm run dev效果如下图所示 第四步&#xff1a;打包 打包执行成功后&#xff0c;…

萤石摄像头更换wifi操作记录

手机和摄像头在同一wifi下下载萤石云视频app长按reset,蓝灯常闪app中配置WiFi&#xff0c;要输入设备验证码&#xff0c;在设备上有配置完就可以了 H264编码修改方法https://open.ys7.com/bbs/article/14

️ LangChain +Streamlit+ Llama :将对话式人工智能引入您的本地设备(下篇)

引言&#xff1a;种下一棵树最好的时间是十年前,其次是现在 书接上回&#xff1a;将对话式人工智能引入您的本地设备成为可能CSDNhttps://mp.csdn.net/mp_blog/creation/editor/140865426 目的&#xff1a;在这个大模型横行的时候&#xff0c;我们常用电脑如何开展大模型的工作…

抽帧剪辑手法有哪些有什么好处 抖音抽帧补帧能不能提高作品原创度 抽帧剪辑可以防止被判搬运么 会声会影视频制作教程 会声会影中文免费下载

如果作品过不了原创检测&#xff0c;那么建议你一定要学会抽帧剪辑&#xff0c;这是目前最有效的防搬运检测手段。精细化地抽帧、补帧&#xff0c;可以轻松通过视频平台的原创和版权检测&#xff0c;避免视频被判搬运。在抖音或快手上进行短视频创作时&#xff0c;‌抽帧和补帧…

JS+CSS案例:JS+CSS 实现漂亮时尚的样式表切换(换肤)功能

切换样式表可能有人不理解&#xff0c;但说到网站换肤&#xff0c;大概率就很多人都明白了。因为它是很多网站都已经有的功能了&#xff0c;最常见的就是很多网站的关灯模式。本文&#xff0c;就给大家分享一个我自己网站上使用的样式表切换的方案。 案例效果 目录结构 文件准…

Ubuntu22.04 解决fabric 安装gradle构建的Java合约超时

问题 fabric安装gradle构建的Java合约时遇到合约代码编译超时问题&#xff0c;如下&#xff1a; $ peer lifecycle chaincode install cp.tar.gz Error: chaincode install failed with status: 500 - failed to invoke backing implementation of InstallChaincode: could …

宝塔面板上,安装rabbitmq

废话不多说&#xff0c;直接上干货&#xff01; 第一步&#xff1a;登录宝塔账号&#xff0c;在软件商店里搜索 第二步&#xff1a;点击设置 第三步&#xff1a;已经完成了&#xff0c;还看啥&#xff01;

3D魔方lua核心脚本制作

制作不易,请好好欣赏 U→R→F→D→L→B 废话不多说,上脚本 --魔方基本运行程序 --星空露珠优化脚本lua --主核心来自分享 --666 --[=[ #G4=I 1 # 2-----------2------------1 # | U1(0) U2(1) U3(2) | # …