这是一个我在博客园也写了的文章,很简单的一个小程序,涉及到python的matplotlib的画布转图片保存,以及控制图像大小的一些问题。

近期在B站答应了帮人切割一匹像素游戏图片:

这是一张PNG图,我需要将图中的独立的图像帧切割成一样大小,同事保证图像要在中间。

还好,图片之间挺规律的,使用熟悉的Python处理一下应该可以我的想法是这样的:

先删除掉整行整列,得到一个图像紧凑的图片。

PNG图片在程序里打开居然是RPG像素点和灰度值,这个倒是在我的知识之外。

对整行整列进行判断,在网上查了一下,使用线性代数的奇异值比较好。

奇异值是将一个大的矩阵用三个小矩阵表示:

from PIL import Image
import numpy as np
import osfolder_url  = './'file_list = os.listdir(folder_url)
pic = np.array(Image.open(folder_url + file_list[0]))
pic = pic[0:120,0:120]
print(pic.shape)
col = pic[:,0]
print(col)
u, s, vh = np.linalg.svd(col)
print(s)

这个是输出:

(120, 120, 4)
[[255 255 255   0][255 255 255   0][255 255 255   0]
...[255 255 255   0][255 255 255   0]]
[4.83828482e+03 6.69772121e-13 3.66435383e-29 0.00000000e+00]

其实写到这里的时候就卡住了,将图像中空白的行和列删除的代还没没写出来,我就看到了这种图片:

这种技能特效在图像中进项上面所说的切割的话肯定会被破坏掉,所以只能手动切割了,还要计算图像的大小。

最后的程序用了TensorFlow进行数据切割,将大的PNG数据切割成小块的张量数组,使用的matplotlib的画布来保存。

我本来也想用OpenCV,Bug多多放弃了,因为保存的PNG小图像帧有条纹背景!

import tensorflow as tf
import matplotlib.pyplot as plt
import osfolder_url  = './'file_list = os.listdir(folder_url)
print(file_list)
#保存路径
min_pic_name = file_list[0].split('.')[0]
save_url= './Pic-ed/' + min_pic_name + '/'#读取图像
pic1_data = tf.io.read_file(folder_url + file_list[0])
pic_tensor = tf.image.decode_png(pic1_data)
#图像裁切,因为图像数据不统一,这里只能手动设置
pic_tensor = pic_tensor[11:1011,0:700]#设置画板样式
plt.figure(figsize=(8,8))
plt.box(False)
plt.gca().axes.get_yaxis().set_visible(False)
plt.gca().axes.get_xaxis().set_visible(False)pic_list = []
h = pic_tensor.shape[0]
w = pic_tensor.shape[1]
min_w = 100  #图像宽度
min_h = 100  #图像高度for x in range(0, int(w/min_w)):temp_list = []pic_col = pic_tensor[:, x*min_w:(x+1)*min_w]  #取一列图像for y in range(0, int(h/min_h)):min_pic = pic_col[y*min_h:(y+1)*min_h, :]  #取一小张图像plt.imshow(min_pic)  #绘制在画布上temp_list.append(min_pic)#保存图像,这里可以设置图像的质量plt.savefig(save_url + min_pic_name +"{}.png".format(str(x+1) + '_' + str(y+1)),transparent=True)         #清除画板内容plt.clf()#重新设置画板样式plt.box(False)plt.gca().axes.get_yaxis().set_visible(False)plt.gca().axes.get_xaxis().set_visible(False)pic_list.append(temp_list)

其实又渣又烂的程序,还有bug……

这是切割后的效果:

没做过游戏,看到这些一帧帧的刷动画动起来还是挺惊艳的。

大图片上的像素风格游戏图片分割相关推荐

  1. 如何在大屏幕上滚动播放视频、图片和文字

    传统方法 在各种大屏上滚动播放视频.图片和文字的方法通常有如下两种: 1)使用视频播放软件,创建播放列表进行播放 2)使用信息发布系统,创建播放列表进行播放 第1种方法相对比较Low,需要到连接屏幕的 ...

  2. 如何去掉图片上的水印而不损图片

    平时不管是发朋友圈还是发布自媒体,都需要图片的结合,而很多图片我们都是来自百度,但是有一点不好的就是很多图片中都会有水印的存在,给我们的视觉效果会有一定的影响,所以就想着将图片中的水印去掉,平时大多数 ...

  3. 实验二(1)——8bit像素深度bmp图片与24bit像素深度bmp图片互转2021-03-20

    一.实验要求 编写8bit像素深度bmp图片与24bit像素深度bmp图片互相转换的程序,将给定的8bitbmp图片和24bitbmp图片分别转换为24bitbmp图片和8bitbmp图片,其中24b ...

  4. themyleaf 图片上传_javaEE --springboot #实现图片上传和回显 #单文件上传 #多文件上传 #ajax异步文件上传 (非常详细,从创建项目开始)...

    实现文件上传和回显 1.新建一个SpringBoot项目,选择 Spring Web 和 thymeleaf 依赖 .pow.xml文件下的依赖如下 2.根据下图,创建如下文件 3.直接上代码 配置文 ...

  5. 壁纸图片|2020年12月游戏图片大全

    2020年12月游戏图片大全 高图整理搜集了2020年12月发售游戏图片大全.包括热门游戏图片.游戏封面图片.游戏内容图片.电影类别分为动作游戏.竞速游戏.冒险游戏.模拟游戏.策略游戏,角色扮演游戏, ...

  6. php 更改图片后缀名,PHP在图片上传时如何改变图片后缀为jpg

    PHP在图片上传时改变图片后缀为jpg的方法:首先获取上传的图片后缀,并获取图片在电脑上的临时存储位置:然后获取临时存储文件的后缀:最后实现后缀转换,代码为[case 'im{ / S # p |ag ...

  7. **微信小程序图片上传+后台PHP修改图片名称**

    微信小程序图片上传+后台PHP修改图片名称 前端代码:比较随意 <view class="weui-uploader"><view class="img ...

  8. antd 图片上传遇到的坑----图片回显(Upload)

    antd 图片上传遇到的坑----图片回显(Upload) 最近又被安排了一个前端的项目,遇到了一个图片上传的问题,用的是antd的Upload组件,在这遇到的问题和大家分享一下,下网可以帮到需要的人 ...

  9. jsp图片上传提交前,图片显示在页面上

    <divclass="upload_box"> <b>上传图片</b> <inputtype="file"name=& ...

最新文章

  1. python导入哨兵数据_Python 下载哨兵Sentinel数据(Sentinel-1~3)
  2. java数组元素相加_数组元素相加
  3. matlab画图模糊,[转载]matlab中模糊工具箱的使用
  4. LeetCode 1686. 石子游戏 VI(贪心)
  5. ajax 请求_你了解前端出现Ajax跨域请求的原因吗?
  6. 阅读java文件_阅读与阅读写文件 - Java空格
  7. linux配置libpng环境变量_不同操作系统下 jdk 的配置
  8. 居民安装光伏系统常会碰壁 怎么样做才能少走弯路?
  9. win7卸载显卡及对应驱动后桌面分辨率不对以及鼠标键盘无反应
  10. mysql 5.0创建函数_MySQL5.0中的Function和Procedure
  11. C++随机数生成器(default_random_engine)
  12. 切比雪夫多项式MATLAB绘图
  13. docker安装镜像
  14. 4、网络嗅探器的设计与实现
  15. 【文件监控】之一:理解 ReadDirectoryChangesW part1
  16. Android软件开发面试题,安卓面试题库
  17. Java中RGBtoHSB_HSV/HSB颜色排序列表
  18. 在线制作banner的网站
  19. 如果机器可以深度学习,人类的学习有何意义
  20. 数据预处理之数据清洗

热门文章

  1. FreeMarker自定义标签编写
  2. Ansible几个常用模块
  3. python自动化测试生成报告_使用python测试框架完成自动化测试并生成报告-实例练习...
  4. GPFS和Lustre之后,还有谁来接盘?
  5. 简易扑克牌游戏JAVA源码_新手上路
  6. 中医公布身体6个“救命”穴位
  7. 红外海洋目标检测实践,基于目标检测模型识别红外海洋目标
  8. c语言 压缩txt文件的函数,c语言 文本文件压缩
  9. 2021年三个季度的监控摄像头品牌排名
  10. 封装Vue倒计时组件vuecountdown(详细教程)