nnn356
发表于 2020-4-19 16:19:54
新人先观摩下!自己研究研究看看!
marqqer
发表于 2020-4-22 01:23:33
多谢楼主的好贴,楼主辛苦了。
tgbyhnpoiujm
发表于 2020-4-22 17:33:08
这都是大神啊{:1_452:}
marqqer
发表于 2020-4-24 18:33:24
谢谢分享.厉害厉害,研究研究
XEricSin
发表于 2020-5-23 05:27:10
今天我们来讲一讲怎么从网上获取新的特效动画DEF。
网上有很多gif动图,但是这些动图绝大多数是半透明图片混合到底色上生成的假半透明图片。几乎没有H3可以直接使用的透明像素和不透明像素分开的图片。
幸好,这些动图中很大部分是黑色或深灰色的底色。这使得我们可以通过一些手段把这些假半透明变成抖动式的半透明。
我利用python写了几个函数。使用时,调用 extractGIFframes2() 和 generateBMPforDEF() 两个函数,生成bmp图片,然后可以用DEF编辑器打包城DEF。
#例子,两个函数输入的文件夹地址必须一致
extractGIFframes2('C:/folder')
generateBMPforDEF('C:/folder')
转化gif前,先创建一个文件夹比如叫effect1,把下载的gif动图放到文件夹中。
生成可用图片后变成这个样子:
放入DEF编辑器中的效果:
以下为python代码,需要按照相关库:
import numpy as np
import random
import os
import cv2
from matplotlib import pyplot as plt
#in_path = bmp/gif图片
#out_path = bmp/gif图片
#针对黑色背景的GIF
#根据HSV的V值随机剔除像素
#比方法2更耐受背景噪音
def removeTransparency3(in_path, out_path):
image = cv2.imread(in_path, cv2.IMREAD_COLOR)
image1 = image.copy()
image2 = cv2.blur(image, (3, 3)) # 使用均值后的图像决定像素是否清零
HSV = cv2.cvtColor(image2,cv2.COLOR_BGR2HSV)
H,S,V = cv2.split(HSV)
V_Threshold_Lower = (V.max())*1.05 # 前五个像素点选最大值作为阈值
V_Threshold_Upper = 255 - V_Threshold_Lower
#print(V_Threshold_Lower, V_Threshold_Upper)
#print(V)
for i in range(V.shape):
for j in range(V.shape):
if V < V_Threshold_Lower:
image1=
elif V < V_Threshold_Upper:
r = random.random() # 0-1
if r > (V - V_Threshold_Lower)/(V_Threshold_Upper - V_Threshold_Lower):
image1=
# 对比原始图片和随机去除透明后的图片
#plt.figure(figsize=(60,20))
#plt.subplot(121); plt.imshow(image)
#plt.subplot(122); plt.imshow(image1)
#plt.show()
cv2.imwrite(out_path, image1)
def generateBMPforDEF(framesFolder):
#输入目标文件夹的路径
filedir0 = framesFolder
#设置输出文件夹在输入文件夹内
filedir1 = filedir0 + '/generated pics'
#创建新文件夹
if not os.path.exists(filedir1):
os.makedirs(filedir1)
#获取目标文件夹中的文件名称列表
filenames = os.listdir(filedir0)
#遍历文件名
for filename in filenames:
extension = filename.split('.')[-1]
if extension == 'bmp'or extension == 'png':
filepath0 = filedir0 + '/' + filename
filepath1 = filedir1 + '/' + filename[:-3] + 'bmp'
#print(filepath0)
print(filepath1)
removeTransparency3(filepath0, filepath1)
def extractGIFframes2(GIFfolder):
'''
约定文件夹中只有一个xxx.gif
xxx的帧文件保存为GIFfolder/xxx-index.bmp
路径中用一律使用'/'
'''
#输入目标文件夹的路径
filedir0 = GIFfolder
#设置输出文件夹在输入文件夹内
filedir1 = filedir0 # 直接保存到当前目录
#获取目标文件夹中的文件名称列表
filenames = os.listdir(filedir0)
#遍历文件名,应该保证只有一个gif文件
for filename in filenames:
if filename.split('.')[-1] == 'gif':
filepath0 = filedir0 + '/' + filename
x=cv2.VideoCapture(filepath0)
i=1
while True:
filepath1 = '%s/%s-%02d.png' % (filedir1, filename.split('.'), i)
ret, frame = x.read()
if ret == True:
cv2.imwrite(filepath1, frame)
i+=1
else:
return
jessask
发表于 2020-6-4 16:08:28
很详细的教程,学习学习
qwp850127
发表于 2020-6-15 14:52:56
最近就在学这个,才看到有教程……哎!不过还来得及~
超人归来
发表于 2020-6-15 15:59:19
感谢楼主分享,虽然我一点也看不懂
tcwang11
发表于 2020-9-5 15:39:29
好教程,稍微有点编程基础就很好理解了,另外请教一下,erm里面有没有类似random的方法或者函数,还有类似(1-1)/(2+2)的运算就必须赋值两次才能够达成吗?
贤知有您
发表于 2020-9-5 16:46:07
tcwang11 发表于 2020-9-5 15:39
好教程,稍微有点编程基础就很好理解了,另外请教一下,erm里面有没有类似random的方法或者函数,还有类似 ...
ERM帮助有相关的内容.
VR:R VR:T 语法用于随机数
运算只能是从左到右,没有优先,没有括号
tcwang11
发表于 2020-9-6 10:08:06
贤知有您 发表于 2020-9-5 16:46
ERM帮助有相关的内容.
VR:R VR:T 语法用于随机数
运算只能是从左到右,没有优先,没有括号
感谢007大佬解答
lima133
发表于 2020-12-25 20:07:57
本帖最后由 lima133 于 2020-12-25 20:11 编辑
楼主非常棒,还设计批量处理程序,如果能做个一键处理完毕的傻瓜就更好了。
网上的资源包寻找何种图片格式最方便做?三国群英传里面的兵种是否可以改成def?
godsn1
发表于 2021-4-12 03:35:24
对于我这种0基础的小白,只能发点感叹了!!!然后什么也做不了;quq;
yo名字很短
发表于 2021-4-12 11:22:14
写的很详细,厉害
showaye
发表于 2021-10-22 10:12:17
新来的学习下
fjzrc19921022
发表于 2022-3-15 17:15:39
来学习一下
fjzrc19921022
发表于 2022-3-16 16:14:50
今天想看看如何自己制作一个新的生物呢
fjzrc19921022
发表于 2022-3-18 00:42:29
如果我设置的条件是“当访问营火的英雄为编号2的英雄时执行”,那么请问具体应该怎么编辑呢?我没有找到可以获取当前英雄编号并保存到变量中的语句呀。
fjzrc19921022
发表于 2022-3-19 20:46:00
我找到了这个代码
fjzrc19921022
发表于 2022-3-23 22:43:31
巴拉巴拉,巴拉巴拉