首页 > 其他分享 >【教学类-72-02】20240819建筑对称图纸02(图案最大化)

【教学类-72-02】20240819建筑对称图纸02(图案最大化)

时间:2024-08-21 20:24:08浏览次数:8  
标签:02 name image 72 file path folder os 20240819

背景需求

【教学类-72-01】20240803建筑对称图纸01-CSDN博客文章浏览阅读423次,点赞13次,收藏5次。【教学类-72-01】20240803建筑对称图纸01https://blog.csdn.net/reasonsummer/article/details/140893003

我感觉房子有大有小,有大量空白,我想让建筑变得最大

使用以下代码,把房子图片变成最大。

【教学类-75-01】20240817“通义万相图片最大化+透明png”的修图流程-CSDN博客文章浏览阅读1.6k次,点赞52次,收藏15次。【教学类-75-01】20240817“通义万相图片最大化+透明png”的修图流程https://blog.csdn.net/reasonsummer/article/details/141275880

看看修图的过程

一、原图(大于1MB,1024*1024)

二、PS白背景(几百K,1024*1024)

三、手动修图(手动PS,把背景黑点子,不要的装饰都修成白色 1024*1024,图案KB比PS白背景时一点)

四、把房子图案上下左右的白边都切掉

切边后,每张图片的长宽都不同,像素比手动修图的图片更小

五、变成透明图片(255,255,255白色变成透明)

原来是白色背景

现在是透明背景(浅灰色)

六、选择所有图片中宽度最大的一张,使用它的宽度和长度,把所有的图片统一格式

所以切边后的图案一样大了,KB变大(翻倍)

具体代码


'''
起吊白色背景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\图片\20240818生日蛋糕'

# 留一点白边
white_edge=10
# C:\Users\jg2yXRZ\OneDrive\图片\20240817饮料甜甜圈\甜甜圈白色
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'\02PS白色手动'
output_folder = path+r'\03切边图'
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)




以上代码是用来切除白边,由于修图不稳定,白背景上会有看不见的黑点,导致切边位置不精确,所以代码单列。多次切边测试,确保所有图片都能切掉最大的白边。

在确保每张图片的图案都变成个最大(没有白边),再使用以下的“透明图+统一大小图”的代码

'''
去边后白色地方变成透明色
星火讯飞、阿夏
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\图片\20240818生日蛋糕'
input_folder = path+r'\03切边图'
output_folder = path+r'\04透明图'

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)

'''
去边后白色地方变成透明色,透明图片统一大小
星火讯飞、阿夏
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'\05统一图'
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)

作品效果:

左房图案最大了

没有修图前的左房(图案有大有小,有大量白边)

右房图案最大了

没有修图前的右房(图案有大有小,有大量白边)

最终效果对比

大图房子

小图房子

大图房子

小图房子

标签:02,name,image,72,file,path,folder,os,20240819
From: https://blog.csdn.net/reasonsummer/article/details/141336215

相关文章

  • 【教学类-76-01】20240820书包01(图案最大化)
    背景需求通义万相生成图片,把图案最大化的方法(切掉白边)【教学类-75-01】20240817“通义万相图片最大化+透明png”的修图流程-CSDN博客文章浏览阅读1.6k次,点赞56次,收藏17次。【教学类-75-01】20240817“通义万相图片最大化+透明png”的修图流程https://blog.csdn.net/reasons......
  • VS2022+QT6.7.2 定时器的使用(两种方法)
    目录一、继承QObject定时器事件二、QTimer类三、具体实现一、继承QObject定时器事件  所有继承自QObject的类,都会有一个timerEvent(QTimerEvent*event)的纯虚函数,startTimer()设定定时间隔并启动,再重载这个函数以处理自己的定时任务,多个定时任务用timeId区分,结束后......
  • 2025秋招书籍推荐:《深度学习的数学理论》——揭示深度学习背后的数学逻辑
    近年来,随着深度学习在图像识别、自然语言处理等领域的突破性进展,越来越多的研究者和开发者投入到这个领域。然而,尽管深度学习在实践中取得了显著的成功,其背后的理论机制仍然让很多人感到迷惑。这就是为什么我今天想向大家推荐一本书——《深度学习的数学理论》(Mathematical......
  • ACL 2024奖项公布:华科大破译甲骨文最佳论文之一、GloVe时间检验奖
    为期六天的ACL2024正在泰国曼谷举办。ACL是计算语言学和自然语言处理领域的顶级国际会议,由国际计算语言学协会组织,每年举办一次。一直以来,ACL在NLP领域的学术影响力都位列第一,它也是CCF-A类推荐会议。今年的ACL大会已是第62届,接收了400余篇NLP领域的前沿......
  • 2024年无人系统与自动化控制学术研讨会(ICUSAC 2024, 9月27-29)
    无人系统与自动化控制技术的创新和应用,对于提升国家科技竞争力和产业升级具有重要意义,已成为新时代驱动经济与社会变革的关键要素。为了顺应国家发展趋势,2024年无人系统与自动化控制学术研讨会(ICUSAC2024)将于2024年9月27日至29日在中国沈阳隆重举行。本次大会旨在顺应无......
  • 高级java每日一道面试题-2024年8月21日-框架篇[Spring篇]-使用IOC容器应该注意哪些?
    如果有遗漏,评论区告诉我进行补充面试官:使用IOC容器应该注意哪些?我回答:1.理解IOC的基本概念控制反转:在传统的编程模式中,程序会主动控制依赖关系的创建和管理。而在IoC容器中,这种控制权被反转给了容器本身。程序员只需要声明依赖关系,而由容器负责实例化和注入这些依......
  • P10892 SDOI2024 题解
    【题意简述】你有一个数字\(n\),每次操作将\(n/2\),如果\(n\)是一个奇数,你会纠结是向上取整还是向下取整。问你最少纠结多少次。多组数据。【思路】为了方便起见,我们在二进制下重新审视这个题目:在二进制下,一个数除以\(2\)等同于右移一位。默认向下取整,因为右移会舍弃......
  • 基于SpringBoot+Vue的实验室排课系统设计与实现(2025年毕业项目-源码+论文+部署讲解等)
    文章目录1.前言2.详细视频演示3.论文参考4.项目运行截图5.技术框架5.1后端采用SpringBoot框架5.2前端框架Vue6.可行性分析7.系统测试7.1系统测试的目的7.2系统功能测试8.数据库表设计9.代码参考10.数据库脚本11.作者推荐项目12.为什么选择我?13.获取源......
  • 基于Java的志愿者管理系统设计与实现(适用于2025年毕业项目-源码+论文+部署讲解等)
    文章目录1.前言2.详细视频演示3.论文参考4.项目运行截图5.技术框架5.1后端采用SpringBoot框架5.2前端框架Vue6.可行性分析7.系统测试7.1系统测试的目的7.2系统功能测试8.数据库表设计9.代码参考10.数据库脚本11.作者推荐项目12.为什么选择我?13.获取源......
  • IO进程(学习)2024.8.21
    目录进程间通信进程间通信方式无名管道特点读写特性函数接口有名管道特点函数接口读写特性无名管道和有名管道的区别 信号信号的概念信号的分类信号的处理方式信号产生的方式信号信号函数发送信号闹钟信号进程间通信进程间通信方式1..早期的进程间通信......