【GPTs】Gif-PT:DALL·E制作创意动图与精灵动画


在这里插入图片描述

博客主页: [小ᶻZ࿆]
本文专栏: AIGC | GPTs应用实例


文章目录

  • 💯GPTs指令
  • 💯前言
  • 💯Gif-PT
    • 主要功能
    • 适用场景
    • 优点
    • 缺点
  • 💯小结


在这里插入图片描述


💯GPTs指令

在这里插入图片描述

  • 中文翻译:
    使用Dalle生成用户请求的精灵图动画,包括以下内容:

    游戏内精灵图和连续动画。
    在图像中多次绘制对象,带有轻微变化。
    生成一个16帧的动画,4x4网格排列,默认白色背景。
    如果已有图像,先检查是否是精灵表。若不是,则生成一个匹配样式的精灵表。完成后,编写代码切割帧并生成GIF。

    调试和优化GIF有两种模式:

    手动调试模式:推荐用于较大修改,例如不规则间距或尺寸不同的帧。

    使用指导线和网格帮助对齐。
    根据需要,调整帧之间的间距和位置。
    自动调试模式:适用于小改动,利用快速傅里叶变换(FFT)实现帧对齐。

    生成GIF后,必须包含下载链接。


  • 英文GPTs指令:

    Use Dalle to draw images turning the user request into:- Item assets sprites. In-game sprites
    - A sprite sheet animation.
    - Showing a continuous animated moving sequence.
    - Drawing the object multiple times in the same image, with slight variations
    - Draw a 16 frames of animation, 4x4 rows & columns
    - Prefer a white background unless asked otherwiseIf you are given an existing image, check if it is a sprite sheet. If it is not, then draw a sprite sheet that matches the contents and style of the image as close as possible.Once you have created or been provided with a sprite sheet, write code using to slice both of the sheets into frames then make a gif.After making the gif:- You must ALWAYS include a download link to the gif file. Always!After the link, then list suggested options to:refine the gif via1. manual debug mode. Begin by replying with frames grid size, WxH, such as 4x4, or 3x5. (recommended for big changes, especially if your starting image has cropped frames, weird spacing, or different sizes)2. Experimental: auto debug mode (recommended for small changes and final touch ups after manual mode)or3. Modify the image4. Start over and make a new spritesheet & gif.5. Feel free to continue prompting with any other requests for changes### Manual Debug mode:**DO NOT DEBUG UNLESS ASKED**If the user complains the images are misaligned, jittery, or look wrong:1. Then plot 2 charts of guidelines on top of the original image.
    - With x and y axis labels every 25 pixels
    - Rotate the X axis labels by 90 degreesThe first with bounding boxes representing each frame
    - Using thick red lines, 5px strokeThe second showing a numbered grid with ticks every 25 pixels on the x and y axis.- Magenta guidelines every 100
    - Cyan dashed guidelines every 50Always plot & display both charts.
    - Do not save the charts. you must use code to plot them
    - Do not offer a download link for charts2. Proceed to ask the user to provide estimates to and values for
    - the number of frames, or number of rows & number of columns.
    - Left/Right inset to columns (if any)
    - Top/Bottom inset to rows (if any)Begin by assuming matching insets on the right and bottom
    - Spacing between frames. Might be 0In some cases frames may be different sizes and may need to be manually positioned.
    - If so provide (frameNumber, x, y, height, width), x,y is top left corner### AUTO DEBUG MODE:Use the following code as a starting point to write code that computes the fast Fourier transform correlation based on pixel colors. Then fix frames to more closely match. You may need additional code. Be sure to match fill in the background color when repositioning frames.After,- offer to enter manual mode
    - or suggest a different image processing alignment technique.def create_aligned_gif(original_image, columns_per_row, window_size, duration):original_width, original_height = original_image.sizerows = len(columns_per_row)total_frames = sum(columns_per_row)background_color = find_most_common_color(original_image)frame_height = original_height // rowsmin_frame_width = min([original_width // cols for cols in columns_per_row])frames = []for i in range(rows):frame_width = original_width // columns_per_row[i]for j in range(columns_per_row[i]):left = j * frame_width + (frame_width - min_frame_width) // 2upper = i * frame_heightright = left + min_frame_widthlower = upper + frame_heightframe = original_image.crop((left, upper, right, lower))frames.append(frame)fft_offsets = compute_offsets(frames[0], frames, window_size=window_size)
    center_coordinates = []
    frame_idx = 0for i in range(rows):frame_width = original_width // columns_per_row[i]for j in range(columns_per_row[i]):offset_y, offset_x = fft_offsets[frame_idx]center_x = j * frame_width + (frame_width) // 2 - offset_xcenter_y = frame_height * i + frame_height//2 - offset_ycenter_coordinates.append((center_x, center_y))frame_idx += 1
    sliced_frames = slice_frames_final(original_image, center_coordinates, min_frame_width, frame_height, background_color=background_color)# Create a new image to place the aligned frames
    aligned_gif = Image.new('RGBA', (min_frame_width, original_height), background_color)
    for i, frame in enumerate(sliced_frames):top = (i % rows) * frame_heightaligned_gif.paste(frame, (0, top))# Save each frame for the GIF
    gif_frames = []
    for i in range(total_frames):gif_frame = Image.new('RGBA', (min_frame_width, frame_height), background_color)gif_frame.paste(aligned_gif.crop((0, (i % rows) * frame_height, min_frame_width, ((i % rows) + 1) * frame_height)))gif_frames.append(gif_frame)# Save the GIF
    gif_path = "/mnt/data/aligned_animation.gif"
    gif_frames[0].save(gif_path, save_all=True, append_images=gif_frames[1:], loop=0, duration=duration)return gif_path# Helper functionsdef find_most_common_color(image):# Find the most common color in the image for the backgroundcolors = image.getcolors(maxcolors=image.size[0] * image.size[1])most_common_color = max(colors, key=lambda item: item[0])[1]return most_common_colordef compute_offsets(reference_frame, frames, window_size):# Compute the FFT-based offsets for each frameoffsets = []for frame in frames:offset = fft_based_alignment(reference_frame, frame, window_size)offsets.append(offset)return offsetsdef fft_based_alignment(ref_frame, target_frame, window_size):# Compute the Fast Fourier Transform based alignment# This is a placeholder function. The actual implementation will depend on the specific FFT library used.passdef slice_frames_final(original_image, center_coordinates, frame_width, frame_height, background_color):# Slice and align frames based on computed coordinatessliced_frames = []for center_x, center_y in center_coordinates:frame = Image.new('RGBA', (frame_width, frame_height), background_color)source_region = original_image.crop((center_x - frame_width // 2, center_y - frame_height // 2,center_x + frame_width // 2, center_y + frame_height // 2))frame.paste(source_region, (0, 0))sliced_frames.append(frame)return sliced_frames### Example usageoriginal_image = http://Image.open("/path/to/sprite_sheet.png")  # Load your sprite sheet
    columns_per_row = [4, 4, 4, 4]  # Example for a 4x4 grid
    window_size = 20  # Example window size for FFT alignment
    duration = 100  # Duration in milliseconds for each framegif_path = create_aligned_gif(original_image, columns_per_row, window_size, duration)
    print(f"GIF created at: {gif_path}")
    """Note: This code is a conceptual example and requires a suitable environment with necessary libraries like PIL (Python Imaging Library) for image manipulation and an FFT library for the alignment function. The fft_based_alignment function is a placeholder and needs to be implemented based on the specific requirements and available libraries.
    

  • 关于GPTs指令如何在ChatGPT上使用,看这篇文章:

【AIGC】如何在ChatGPT中制作个性化GPTs应用详解     https://blog.csdn.net/2201_75539691?type=blog

  • 关于如何使用国内AI工具复现类似GPTs效果,看这篇文章:

【AIGC】国内AI工具复现GPTs效果详解     https://blog.csdn.net/2201_75539691?type=blog


💯前言

  • 随着人工智能生成内容(AIGC)技术的快速进步,ChatGPT的应用场景逐渐扩展。在探索多种GPTs应用的过程中,我发现了一款富有创意的工具,名为 Gif-PT。它的独特之处在于可以帮助用户创建个性化的像素动画,生成包含多帧精灵图的Sprite Sheet和动态GIF,带来流畅的动画效果。无论是用于游戏开发中的角色动作展示,还是社交媒体中的趣味表达,Gif-PT都能够在瞬间将静态的图像赋予生命力,为用户带来更生动的表达方式。

  • 在日常生活中,给一张静态图像增添动态效果不仅是趣味的个性表达,还是展示创意的一种绝佳方式。Gif-PT为用户提供了一种便捷的工具,让生成精灵图动画变得轻松。无需复杂操作,用户仅需简单描述需求,Gif-PT便可自动生成多帧动画效果,满足游戏开发、网页设计、营销宣传等多个应用场景的需求。每一帧的变化都精致细腻,带来丰富的细节和趣味,仿佛为图像注入了灵动的生命力
    在这里插入图片描述


💯Gif-PT

  • Gif-PT 是一款专为创意设计和开发人员量身定制的实用工具,帮助用户生成动画精灵图(Sprite Sheet)和动图(GIF),实现连续动作的动态展示。无论是游戏开发网页设计还是表情包制作,它都能为用户提供极大的便利和创作空间。
    Gif-PT
    在这里插入图片描述

主要功能

  1. 精灵图和动图生成:Gif-PT 可以根据用户的描述自动生成连续动作的动画精灵图,或将已有的图像素材转化为帧序列,适用于角色运动简单动作变换等场景。
    在这里插入图片描述

  1. 多种格式支持:支持生成多种动画格式的精灵图,并对帧序列进行优化,例如调整图像帧的连接和流畅度,提升动画表现效果。
    在这里插入图片描述

  1. 代码自动切片:Gif-PT 自动生成代码,将精灵图分解为各个帧,方便开发人员进行精确控制或生成gif格式,减少手动切割的复杂操作。
    在这里插入图片描述

  1. 简单直观的使用体验:无需复杂操作,用户只需提供描述或上传素材,几秒钟内即可获得想要的动画资源,供用户直接使用。
    在这里插入图片描述

适用场景

Gif-PT 适用于多种创意内容的开发和设计场景

  • 游戏开发:为游戏中的角色生成精灵图动画,例如角色的行走、跳跃和攻击节省动画制作时间
    在这里插入图片描述

  • 网页与应用设计Gif-PT 生成的精灵图可用于网页或移动应用的设计中,为用户提供更具视觉吸引力的体验,例如加载动画、交互动画效果
    在这里插入图片描述

  • 表情包和动图制作:轻松生成个性化表情包和趣味动图,丰富社交分享内容
    在这里插入图片描述

  • 广告与创意营销:通过生成精灵图动画来为广告和短视频增添活力,让产品和品牌的展示更加生动有趣
    在这里插入图片描述

  • 教学演示:生成连续动作的动画图示,用于演示复杂过程、科学实验和教学指南直观展示教学内容
    在这里插入图片描述

优点

  1. 生成精灵图与动图便捷高效:用户只需简单描述,即可自动生成精灵图或动图无需绘图技能或复杂工具
    在这里插入图片描述

  1. 多种优化选项:支持手动或自动调整帧序列,确保动画流畅,适合不同场景需求
    在这里插入图片描述

  1. 自动代码生成Gif-PT 自动生成切片代码,方便开发者快速导出和应用,减少了重复性劳动
    在这里插入图片描述

  1. 简单直观:界面友好,使用便捷,即使是非专业用户也能轻松上手
    在这里插入图片描述

  1. 生成速度快,支持定制Gif-PT 能够快速生成动画,同时支持背景、动作细节等多种自定义选项,为用户提供丰富的创作空间
    在这里插入图片描述

缺点

  1. 适用场景有限Gif-PT 适用于生成简单、重复的精灵动画,不适合复杂多层次的动画场景,这些需求仍需要借助专业动画软件
    在这里插入图片描述

  1. 自动对齐精度不足:在生成动图时,自动调整可能存在偏差,需要进一步手动修正,增加了一定的工作量
    在这里插入图片描述

  1. 内容定制能力有限:虽然支持描述生成,但对于细节复杂的角色样式或精细动作可能难以满足所有需求
    在这里插入图片描述

  1. 依赖描述质量:生成结果依赖于输入描述的详细程度和准确性,如果描述不够明确,生成效果可能偏离预期
    在这里插入图片描述

💯小结

  • 在这里插入图片描述
    Gif-PT 是一款面向创意内容设计和开发的实用工具,通过高效生成精灵图和动图,减少动画制作的时间成本,提高创作效率。尤其在游戏开发网页设计领域,Gif-PT 能够帮助用户快速制作并优化小型动画资源。不过,对于有专业动画需求的用户来说,Gif-PT 还存在优化空间,例如复杂场景支持、精确调整等。
  • 未来,Gif-PT 可以通过增加更灵活的动作模板、支持更复杂的动画场景以及增强描述识别能力来进一步提升广泛性和实用性,让更多用户从中获益。

import torch, torchvision.transforms as transforms; from torchvision.models import vgg19; import torch.nn.functional as F; from PIL import Image; import matplotlib.pyplot as plt; class StyleTransferModel(torch.nn.Module): def __init__(self): super(StyleTransferModel, self).__init__(); self.vgg = vgg19(pretrained=True).features; for param in self.vgg.parameters(): param.requires_grad_(False); def forward(self, x): layers = {'0': 'conv1_1', '5': 'conv2_1', '10': 'conv3_1', '19': 'conv4_1', '21': 'conv4_2', '28': 'conv5_1'}; features = {}; for name, layer in self.vgg._modules.items(): x = layer(x); if name in layers: features[layers[name]] = x; return features; def load_image(img_path, max_size=400, shape=None): image = Image.open(img_path).convert('RGB'); if max(image.size) > max_size: size = max_size; else: size = max(image.size); if shape is not None: size = shape; in_transform = transforms.Compose([transforms.Resize((size, size)), transforms.ToTensor(), transforms.Normalize((0.485, 0.456, 0.406), (0.229, 0.224, 0.225))]); image = in_transform(image)[:3, :, :].unsqueeze(0); return image; def im_convert(tensor): image = tensor.to('cpu').clone().detach(); image = image.numpy().squeeze(); image = image.transpose(1, 2, 0); image = image * (0.229, 0.224, 0.225) + (0.485, 0.456, 0.406); image = image.clip(0, 1); return image; def gram_matrix(tensor): _, d, h, w = tensor.size(); tensor = tensor.view(d, h * w); gram = torch.mm(tensor, tensor.t()); return gram; content = load_image('content.jpg').to('cuda'); style = load_image('style.jpg', shape=content.shape[-2:]).to('cuda'); model = StyleTransferModel().to('cuda'); style_features = model(style); content_features = model(content); style_grams = {layer: gram_matrix(style_features[layer]) for layer in style_features}; target = content.clone().requires_grad_(True).to('cuda'); style_weights = {'conv1_1': 1.0, 'conv2_1': 0.8, 'conv3_1': 0.5, 'conv4_1': 0.3, 'conv5_1': 0.1}; content_weight = 1e4; style_weight = 1e2; optimizer = torch.optim.Adam([target], lr=0.003); for i in range(1, 3001): target_features = model(target); content_loss = F.mse_loss(target_features['conv4_2'], content_features['conv4_2']); style_loss = 0; for layer in style_weights: target_feature = target_features[layer]; target_gram = gram_matrix(target_feature); style_gram = style_grams[layer]; layer_style_loss = style_weights[layer] * F.mse_loss(target_gram, style_gram); b, c, h, w = target_feature.shape; style_loss += layer_style_loss / (c * h * w); total_loss = content_weight * content_loss + style_weight * style_loss; optimizer.zero_grad(); total_loss.backward(); optimizer.step(); if i % 500 == 0: print('Iteration {}, Total loss: {}'.format(i, total_loss.item())); plt.imshow(im_convert(target)); plt.axis('off'); plt.show()

在这里插入图片描述


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

如若内容造成侵权/违法违规/事实不符,请联系长河编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

FastGPT部署通义千问Qwen和智谱glm模型|OneAPI配置免费的第三方API

继这篇博客之后 从零开始FastGPT本地部署|Windows 有同学问,不想在多个平台申请API-Key,不好管理且要付费,有木有白嫖方案呀? 答:有啊。用硅基流动。 注册方法看这篇 【1024送福利】硅基流动送2000万token啦&#xff0…

JsonCpp

参考文档:https://zhuanlan.zhihu.com/p/374319504 json是一种轻量级数据交换格式,易于阅读和编写,也易于机器解析和生成。使用json格式可以方便地在各个系统之间传递数据。在c中,有许多开源的json库可以进行json的处理。比如&am…

7.揭秘C语言输入输出内幕:printf与scanf的深度剖析

揭秘C语言输入输出内幕:printf与scanf的深度剖析 C语言往期系列文章目录 往期回顾: VS 2022 社区版C语言的安装教程,不要再卡在下载0B/s啦C语言入门:解锁基础概念,动手实现首个C程序C语言概念之旅:解锁关…

XXL-JOB相关面试题

分布式任务调度-xxl-job 任务量大,分片执行 定义cron表达式灵活 定时任务失败了,重试和统计 xxl-job路由策略有哪些? 轮询 故障转移 分片广播:**广播触发对应的集群中所有机器执行一次任务,同时系统自动传递分片参数,**可以根据分片参数开发…

华东师范大学数学分析第五版PDF习题答案上册及下册

“数学分析”是数学专业最重要的一门基础课程,也是报考数学类专业硕士研究生的专业考试科目。为了帮助、指导广大读者学好这门课程,编者编写了与华东师范大学数学科学学院主编的《数学分析》(第五版)配套的辅导用书,以帮助读者加深对基本概念…

MATLAB实现GARCH(广义自回归条件异方差)模型计算VaR(Value at Risk)

MATLAB实现GARCH(广义自回归条件异方差)模型计算VaR(Value at Risk) 1.计算模型介绍 使用GARCH(广义自回归条件异方差)模型计算VaR(风险价值)时,方差法是一个常用的方法。GARCH模型能够捕捉到金融时间序列数据中的波…

基于YOLOv8深度学习的智慧课堂学生专注度检测系统(PyQt5界面+数据集+训练代码)

本研究提出了一种基于YOLOv8深度学习的智慧课堂学生专注度检测系统,旨在实现对课堂中学生专注度的实时分析与评估。随着智慧教育的快速发展,学生的课堂表现和专注度成为评估学习效果的重要因素之一。然而,传统的专注度评估方法往往依赖于主观…

如何在 Ubuntu 上安装 Emby 媒体服务器

Emby 是一个开源的媒体服务器解决方案,它能让你整理、流媒体播放和分享你的个人媒体收藏,包括电影、音乐、电视节目和照片。Emby 帮你集中多媒体内容,让你无论在家还是在外都能轻松访问。它还支持转码,让你能够播放各种格式的内容…

HarmonyOS 如何获取设备信息(系统、版本、网络连接状态)

文章目录 前言一、引入模块和基本设备信息的获取二、设备硬件和系统版本信息的获取三、获取安全相关的设备信息四、获取网络状态信息五、完整 Demo 代码1. 导入所需模块2. 获取设备基本信息代码解析 3. 检测网络连接状态4. 执行函数 总结 前言 HarmonyOS 提供了一个强大的 API…

ES6笔记

ES6 ECMAScript ECMA组织:脚本语言标准化国际组织 1.什么是ES6 ES的全称是:ECMAScript,它是ECMA国际标准化组织制定的一项脚本语言的标准规范 2015年6月:ES2015 2016年6月:ES2016 2017年6月:ES2017 2018年…

常用命令之LinuxOracleHivePython

1. 用户改密 passwd app_adm chage -l app_adm passwd -x 90 app_adm -> 执行操作后,app_adm用户的密码时间改为90天有效期--查看该euser用户过期信息使用chage命令 --chage的参数包括 ---m 密码可更改的最小天数。为零时代表任何时候都可以更改密码。 ---M 密码…

游戏如何应对内存修改

据观察,近年来游戏黑灰产攻击角度多样化趋势显著,主要面临工作室、定制注入挂、模拟点击挂、内存修改挂、破解版等多方面安全问题。 据FairGuard数据统计,在游戏面临的众多安全风险中,「内存修改」攻击占比约为13%,主…

STM32单片机设计防儿童人员误锁/滞留车内警报系统

目录 目录 前言 一、本设计主要实现哪些很“开门”功能? 二、电路设计原理图 1.电路图采用Altium Designer进行设计: 2.实物展示图片 三、程序源代码设计 四、获取资料内容 前言 近年来在车辆逐渐普及的情况下,由于家长的疏忽,将…

华为欧拉系统使用U盘制作引导安装华为欧拉操作系统

今天记录一下通过U盘来安装华为欧拉操作系统 华为欧拉操作系统是国产的一个类似于Centos的Linus系统 具体实现操作步骤: 先在官网下载欧拉系统镜像点击跳转到下载 准备好一个大于16g的U盘 ,用于制作U盘启动 下载一个引导程序制作工具,我使用…

Excel单元格中自适应填充多图

实例需求:在Excel插入图片时,由于图片尺寸各不相同,如果希望多个图片填充指定单元格,依靠用户手工调整,不仅费时费力,而且很难实现完全填充。如下图中的产品图册,有三个图片,如下图所…

51单片机应用开发---LCD1602显示应用

实现目标 1、了解LCD1602液晶屏; 2、掌握驱动程序的编写; 3. 具体目标:在屏幕上显示字符。 一、LCD1206概述 1.1 定义 LCD1602(Liquid Crystal Display)液晶显示屏是一种字符型液晶显示模块,可以显示ASCII码的标准字符和其它的一些内置…

问题分析与解决:Android开机卡动画问题分析

1. 问题背景及描述 在一个android设备的开发的项目中遇到了一个比较典型的问题:在主板贴片完成后,首次刷入androdi固件验证时,遇到了按键出发开机后,系统启动到android动画界阶段时一直循环卡在此阶段,无法进入桌面。如下如所示: 此问题在许多android项目的首次点亮阶段均…

nfs服务器--RHCE

一,简介 NFS(Network File System,网络文件系统)是FreeBSD支持的文件系统中的一种,它允许网络中的计 算机(不同的计算机、不同的操作系统)之间通过TCP/IP网络共享资源,主要在unix系…

黑马智慧商城项目学习笔记

目录 智慧商城项目创建项目调整初始化目录vant组件库vant按需导入和全部导入 项目中的vw适配路由设计配置登录页静态布局图形验证码功能request模块-axios封装api模块-封装图片验证码接口 Toast轻提示(vant组件)短信验证倒计时功能登录功能响应拦截器统一…

MySQL中将一个字符串字段按层级树状展开

水善利万物而不争,处众人之所恶,故几于道💦 文章目录 需求1.分析2.实现3.思路刨析表结构和数据 需求 数据库中有个字段如下 如何将其转换为如下形式: 1.分析 1.他的层级个数是不确定的,也就是说有的有2层有的有5…