【教学类-75-01】20240817“通义万相图片最大化+透明png”的修图流程

news2024/12/25 1:17:30

背景需求:

打印了袜子配对的PDF模版,做预测试

【教学类-74-02】彩色袜子配对02--左右配对-CSDN博客文章浏览阅读497次,点赞10次,收藏9次。【教学类-74-02】彩色袜子配对02--左右配对https://blog.csdn.net/reasonsummer/article/details/141139239

【教学类-74-03】彩色袜子配对03--影子配对-CSDN博客文章浏览阅读651次,点赞30次,收藏9次。【教学类-74-03】彩色袜子配对03--影子配对https://blog.csdn.net/reasonsummer/article/details/141140265【教学类-74-04】黑白袜子组装04--圣诞袜子-CSDN博客

【教学类-74-04】黑白袜子组装04--圣诞袜子-CSDN博客文章浏览阅读889次,点赞24次,收藏8次。【教学类-74-04】黑白袜子组装04--圣诞袜子https://blog.csdn.net/reasonsummer/article/details/141190398

三款学具都打印了一张,测试我有一种感觉——好浪费

1、图案周围有大量的空白位置,裁剪后一半的白纸扔掉了

2、图片图案比较小,比如圣诞袜子,无法在里面塞东西

3、所以我希望袜子图案能够最大化,同时将两只袜子能够拼图(需要变成透明PNG)

从20240815-20240817我用星火讯飞、UIBOT和Photoshop反复测试,终于梳理出一套吧星火讯飞图案最大化(去掉白边)、制作PNG透明图片的流程。

主要流程:

1、通义万相生成图片

2、UIBOT下载图片

3、手工分类图片,放到文件夹

4、UIBOT+PS对图片进行背景填色(选取相似白色填充255,255,255)

5、PS手工修图:多余元素去除

6、Python切掉图片的白边(识别上下左右的第一个非白色坐标,切掉相应点垂线的块面)

7、切边不准确的图片手动修图,继续Python切掉白边

8、将图片白色部分变成透明色

9、再次统一图片的长宽

具体操作如下

一、通义万相生成图片

二、UIBOT下载图片

三、挑选分类图片

(一)不符合需求的照片

(二)需要的照片

三、复制文件夹,使用UBIOT和PS背景修图

图片背景修改成白色

四、手动修图,去掉不要的元素。

根据自己的需求,适当手动修图

最后是白背景修图的饮料图片(只有杯子,杯子外面的装饰、黑点删除)

五、第一次切边:切掉图案四周的白边,确保黑色图案最大


'''
起吊白色背景255,255,255图片中黑色图案周围的一圈白边,确保图案最大化
星火讯飞、阿夏
20240817
'''





print('----1、切掉上下左右的白色图层------')

import os
from PIL import Image

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

path=r'C:\Users\jg2yXRZ\OneDrive\图片\20240817饮料汉堡'

# 留一点白边
white_edge=10

import os
from PIL import Image

def find_non_white_pixel(image):
    width, height = image.size
    left, right, top, bottom = width, 0, height, 0

    for y in range(height):
        for x in range(width):
            r, g, b = image.getpixel((x, y))
            if r != 255 or g != 255 or b != 255:
                if x < left:
                    left = x
                if x > right:
                    right = x
                if y < top:
                    top = y
                if y > bottom:
                    bottom = y

    return left, right, top, bottom

def crop_image(image, left, right, top, bottom):
    return image.crop((left-white_edge, top-white_edge, right + white_edge, bottom + white_edge))



folder_path = path+r'\饮料白色'
output_folder = path+r'\饮料切边图'
os.makedirs(output_folder, exist_ok=True)


for file_name in os.listdir(folder_path):
    if file_name.endswith(".jpg") or file_name.endswith(".png"):
        input_path = os.path.join(folder_path, file_name)
        image = Image.open(input_path)
        left, right, top, bottom = find_non_white_pixel(image)
        cropped_image = crop_image(image, left, right, top, bottom)
        output_path = os.path.join(output_folder, file_name)
        cropped_image.save(output_path)




切边前后对比

1、切边之前的图案都是1024*1024,周围有白色图案

切边之后,上下左右的白边切掉了,主体图案变大了,但图案长宽尺寸完全不同

检查切边图,是否有图片白边没有完全切除

说明这些图片的白色部分有看不见的黑色,需要再次手动清除。

记住编号,退出切边图文件夹,回到白色图片文件夹,选取图片手动修图

第一次切边后,需要检查切边位置知否正好贴合黑色图案四条边

我发现背景里看不见的黑色还不少,影响切边位置的准确性,

所以还是要手动把每张图片除了图案部分以外的地方,打码成白色(主要是手动去冰块、背景水滴图片时,没有把黑色去干净)

肉眼看不出差别,只有PS里面才能,手动为白色背景填充(画笔工具图色)

再次用代码生成,图案最大化了

效果展示

对比图1(原始白色、周围白边)

对比图2(去边白色、最大化图案)

八、制作透明png

为了减少白色部分的浪费,将白色部分变成透明色,让图案与图案之间可以重合

'''
去边后白色地方变成透明色
星火讯飞、阿夏
20240817
'''
from PIL import Image
import os

def process_image(file_path):
    img = Image.open(file_path)
    img = img.convert("RGBA")
    datas = img.getdata()

    new_data = []
    for item in datas:
        if item[0] == 255 and item[1] == 255 and item[2] == 255:
            new_data.append((255, 255, 255, 0))
        else:
            new_data.append(item)

    img.putdata(new_data)
    return img

path=r'C:\Users\jg2yXRZ\OneDrive\图片\20240817饮料汉堡'
input_folder = path+r'\饮料切边图'
output_folder = path+r'\饮料切边图透明'

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

for file_name in os.listdir(input_folder):
    if file_name.endswith(".png") or file_name.endswith(".jpg") or file_name.endswith(".jpeg"):
        input_file_path = os.path.join(input_folder, file_name)
        output_file_path = os.path.join(output_folder, file_name)
        processed_image = process_image(input_file_path)
        processed_image.save(output_file_path)

以下就是白色变透明的去边后的最大化图案

特别说明

在照片库里,白色背景png和透明背景png看上去都是白色,如何区分是否已经做成透明png

透明png偶尔有几张是黑底的,说明是png透明图层,但是大部分还是看上去是白色底

需要双击打开图片,浏览.

1、如果图案有明显的白色背景,与浅灰色查看器背景不同,说明就是白色png

2、如果图案没有白色背景,与浅灰色查看器背景融为一体,说明就是透明png

做成透明png,可以实现拼图

同样如果使用白色背景,就无法拼图

白色背景会浪费纸张,图案本身变小

九、统一图片尺寸

用这种方法,可以获取透明PNG图片,但是修改透明和切边的图片尺寸是不同的。

所以需要用Python程序调整统一这些图片的长宽

'''
去边后白色地方变成透明色,透明图片统一大小
星火讯飞、阿夏
20240817
'''      

print('----2、图片放大成为1024*1024------')
import os
from PIL import Image

path=r'C:\Users\jg2yXRZ\OneDrive\图片\20240817饮料汉堡'
input_folder = path+r'\饮料切边图'
output_folder = path+r'\饮料切边图透明'

# 提取最大宽度的那张图片的尺寸
def get_max_width_and_height(fold_path):
    max_width = 0
    max_height = 0

    for file_name in os.listdir(fold_path):
        if file_name.endswith(".png") or file_name.endswith(".jpg") or file_name.endswith(".jpeg"):
            file_path = os.path.join(fold_path, file_name)
            img = Image.open(file_path)
            width, height = img.size
            if width > max_width:
                max_width = width
                max_height = height

    return max_width, max_height

fold_path = output_folder
max_width, max_height = get_max_width_and_height(fold_path)
print("最大宽度:", max_width)
print("最大高度:", max_height)

# 最大宽度: 724
# 最大高度: 869

# # 自定义长宽
# max_width=622
# max_height=877

# 统一所有图片大小
def resize_image(image_path, output_folder, new_image_name):
    img = Image.open(image_path)
    new_img = img.resize((max_width,max_height))
    new_img.save(os.path.join(output_folder, new_image_name))


newput_folder =path+r'\饮料一大小图'
os.makedirs(newput_folder,exist_ok=True)



for file in os.listdir(output_folder):
    if file.endswith('.png'):
        input_image_path = os.path.join(output_folder, file)
        new_image_name = f"{file[:-4]}.png"
        resize_image(input_image_path, newput_folder, new_image_name)

我选了这些图片中宽度最大的一张,并复用它的高度

最大宽度: 724
最大高度: 869

饮料统一了大小。

结语:用这种方式,可以让图案变最大,减少白边,减少白纸浪费。进一步实现拼图的效果

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

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

相关文章

09:链表的介绍

链表 1、算法的定义2、链表 1、算法的定义 通俗的定义&#xff1a;解题的方法与步骤。       狭义的定义&#xff1a;对存储的数据的操作。       广义的定义&#xff1a;无论数据是如何存储的&#xff0c;对数据从操作都是一样的。 到目前为止我们可以通过2种结构来存储…

关于订单最终一致性解决方案

背景 整体的交易架构主要由两部分组成&#xff1a;C端交易平台 - B端交易平台 由于组织架构的特殊性&#xff0c;并没有采用两阶段提交、三阶段提交这种刚性分布式事务的方案。 主要采用了基于TCC思想的TOC柔性事务补偿方案。 柔性事务&#xff1a;遵循BASE原则&#xff0c;…

Redis7.x安装系列教程(四)集群部署原理详解

1、什么是集群部署 Redis集群(cluster)是Redis的一种分布式运行模式&#xff0c;通过分片(sharding)提供数据的自动分区和管理&#xff0c;实现数据的高可用性和可扩展性。 在集群模式下&#xff0c;数据分布在多个Redis节点上&#xff0c;节点分为主节点和从节点。主节点负责…

Pytorch如何判断两个模型的权重是否相同(比较权重差异/参数字典)

参考资料&#xff1a; GPT-4o mini的回答 第一种方法是使用md5sum这个命令(Linux上)&#xff0c;但是由于环境的不同&#xff0c;哪怕是load之后转存似乎都会有差&#xff0c;所以效果不大。 第二种方法是使用代码比较&#xff0c;这段代码是我找GPT要的&#xff0c;感觉非常不…

Linux线程间通信学习记录(线程同步)

0.线程间通信的方法 &#xff08;1&#xff09;.全局变量&#xff08;要结合同步机制&#xff09; &#xff08;2&#xff09;.信号量 &#xff08;3&#xff09;.P操作 &#xff08;4&#xff09;.V操作 一.线程同步 同步&#xff1a;指的是多个任务按照约定的先后次序相互…

OpenCV图像滤波(19)计算图像每个像素点的邻域内的平方和函数sqrBoxFilter()的使用

操作系统&#xff1a;ubuntu22.04 OpenCV版本&#xff1a;OpenCV4.9 IDE:Visual Studio Code 编程语言&#xff1a;C11 算法描述 计算覆盖在滤波器上的像素值的平方和。 对于源图像中的每一个像素 (x, y)&#xff0c;函数计算那些与放置在像素 (x, y) 上的滤波器重叠的邻域像…

【百度】25届秋招内推码

内推码 IV1RBB 介绍 &#x1f4e3; 百度TPG技术中台事业群组—深度学习技术平台部 25届校招正在进行中&#xff0c;可通过定向内推形式get校招绿色通道 &#xff01; 欢迎联系我定向内推 &#x1f31f;【部门介绍】 飞桨&#xff08;PaddlePaddle&#xff09;以百度多年的深度…

坐牢第二十七天(聊天室)

基于UDP的网络聊天室 一.项目需求&#xff1a; 1.如果有用户登录&#xff0c;其他用户可以收到这个人的登录信息 2.如果有人发送信息&#xff0c;其他用户可以收到这个人的群聊信息 3.如果有人下线&#xff0c;其他用户可以收到这个人的下线信息 4.服务器可以发送系统信息…

idea 遇到依赖引入失败问题

在引入 aspects 的相关依赖时&#xff0c;没有找到这个版本 <dependency><groupId>org.springframework</groupId><artifactId>spring-aspects</artifactId><version>6.0.0-M2</version> </dependency> 第一次尝试&#xff…

C++编程:生产者-消费者模型中条件变量的使用问题及优化方案

文章目录 0. 引言1. 生产者-消费者模型简介1.1 示例代码1.2 为什么必须加锁&#xff1f; 2. 上述代码存在的问题2.1 信号丢失2.2 锁的作用范围2.3 竞态条件 3. 优化方案3.1 使用两个条件变量3.2 扩展锁的作用域3.3 使用原子操作3.4 使用无锁队列 4. 底层实现与深入探讨5. 流程图…

『 C++ 』IO流

文章目录 IO流概述iostream 的标准对象C流和C标准库I/O函数的同步 sync_with_stdiofstream 文件流文件流的打开标志二进制读写二进制读写的浅拷贝问题文本读写 字符串流注意 IO流概述 流是指数据的有序传输序列,路表示数据从一个地方流向另一个地方的过程,流可以是输入流也可以…

欧盟新规:苹果App Store开发者需公开联系方式,透明度提升还是隐私挑战?

本文首发于公众号“AntDream”&#xff0c;欢迎微信搜索“AntDream”或扫描文章底部二维码关注&#xff0c;和我一起每天进步一点点 随着数字经济的蓬勃发展&#xff0c;欧盟对数字服务的监管也在不断加强。最近&#xff0c;苹果公司宣布了一项针对欧盟App Store的新政策&#…

Lesson 67 The weekend

Lesson 67 The weekend 词汇 greengrocer 菜市场 构成&#xff1a;green n. 绿色的    grocer n. 食杂店&#xff0c;小卖店 商店词汇&#xff1a;shop n. 商店      store n. 小店      market n. 市场      super market 超市      Sunday market 二…

Codeforces Round 949 (Div. 2) C.D构造和E题

C题链接 D题链接 E题链接 C题思路&#xff1a; 我们设相邻的两个-1的位置是的值是l和r&#xff0c;他们直接的距离是d(也就是r的下标减l的下标)。 思路1&#xff1a;直接模拟操作&#xff0c;看所有操作里是否有合法操作。 比如1 -1 -1 -1 -1 -1 7. 容易想到1*213,3*217&a…

psychopy 中文语义相关判断任务实验设计

参考文献&#xff1a; [石如彬, 谢久书, 杨梦情, & 王瑞明. (2022). 语言和情境对具体概念感知运动仿真的影响. 心理学报, 54(6), 583–594. https://doi.org/10.3724/SP.J.1041.2022.00583] 2.2.4实验1。 演示效果 按下“上方向键” 按F或J 反馈信息&#xff1a; 实验步骤…

C#中的S7协议

S7协议-S7COMM S7COMM 进行写 CTOP->PDU type已知枚举值 0X0E连接请求0x0d连接确认0x08断开请求0x0c断开确认0x05拒绝访问0x01加急数据0x02加急数据确认0x04用户数据0x07TPDU错误0x0f数据传输 S7Header->ROSCTR已知枚举值 0X01JOB REQUEST。主站发送请求0x02Ack。从站…

jmeter压测websocket

1、jmeter安装websocket插件 下载地址 pjtr / JMeter WebSocket Samplers / Downloads — Bitbucket 下载之后&#xff0c;放到lib/ext文件夹下&#xff0c;重启jmeter即可&#xff0c;看到下图这些证明插件安装成功 2、脚本 新建websocket request-response sampler

day05-SpringBootWeb请求响应学习笔记

上面说过&#xff0c;浏览器向服务端发送请求&#xff0c;服务端会给浏览器发送出响应&#xff0c;无论是哪种&#xff0c;都包含三部分。这一章&#xff0c;依旧围绕这部分内容 请求 Postman 由于前后端分离&#xff0c;对我们后端技术人员来讲&#xff0c;在开发过程中&…

SpringBoot——整合Swagger

目录 Swagger Swagger工具集 Swagger注解 项目总结 新建SpringBoot项目 pom.xml Swagger2Config配置类 User实体类 UserController控制器 项目测试 添加用户 修改用户 查询用户 删除用户 Swagger Swagger是一款基于RESTful接口的用于文档在线自动生成和功能测试的开…

揭开虚拟与现实的帷幕:二进制世界与道

本章将带领读者进入一个结合科学与哲学的思维世界&#xff0c;从一个全新的视角探讨二进制世界的概念&#xff0c;结合超弦理论和老子的“道”哲学&#xff0c;深入理解计算机底层的运行原理及其与宇宙本质的联系。通过回顾经典电影《黑客帝国》以及最新的人工智能发展&#xf…