【3D相册】零基础完成3D相册并配上背景音乐

article/2025/10/12 15:37:53

文章目录

    • 一、前言
    • 二、准备工作
        • 1、新建文件夹
        • 2、准备素材
            • 对于图片的处理
            • 对于音乐的处理
    • 三、代码工作
        • 1、python处理6张图片
            • 1.1代码运行
            • 1.2 放入背景图片
        • 2、写html文件
            • 2.1 更换音乐素材
        • 3、运行main.html
    • 四、推荐阅读

一、前言

帮助好哥们整的一个小相册,给他写个教程帖
在这里插入图片描述
大致效果如下(动图超图片上传上限了):
在这里插入图片描述

二、准备工作

1、新建文件夹

如:我在D盘中新建一个 3D相册 文件夹,然后在 3D文件夹 中 新建2个文件夹:imgmain

其中:

  • img:放素材图片
  • main:放html文件

在这里插入图片描述

2、准备素材

素材包括以下:

  • 6张需要放到相册中的图片,放到img文件夹
  • 1张相册背景图片,需要重名名为background.jpg,放到img文件夹中,背景图片要到python程序执行完再放入
  • 1首喜欢的音乐
对于图片的处理

我选择用python来处理。

对于音乐的处理

首先先搜索网易云网页版,找到一首自己喜欢的音乐,进入到详情页,点击生成外链播放器,复制蓝色区域代码,放到记事本,备用。
在这里插入图片描述
在这里插入图片描述

三、代码工作

1、python处理6张图片

需要安装PIL库:

pip install pillow

图片处理代码如下:

import os
from PIL import Imagedef get_file(path):file_list = os.listdir(path)file_list.sort()  # 对列表内容进行排序,默认为升序return file_listdef image_resize(path, files):i = 1for file_name in files:#  待处理图片路径image_path = path + '/' + file_nameimg = Image.open(image_path)# 当处理第二张图片的时候,需要将图片旋转180°,方便相册的观看体验if i == 2:img = img.transpose(Image.ROTATE_180)#  resize图片大小,入口参数为一个tuple,新的图片的大小img_size_1 = img.resize((400, 400))img_size_2 = img.resize((100, 100))# #  处理图片后存储路径,以及存储格式img_size_1.save(path+'/' + str(i) + '.png')img_size_2.save(path+'/0' + str(i) + '.png')i = i+1def main():path = input('请输入你想更改的文件的路径:').replace('\\', '/')files = get_file(path)image_resize(path, files)print("所有图片处理完毕")if __name__ == '__main__':main()
1.1代码运行

首先,在img文件夹里,复制路径
在这里插入图片描述

其次,开始运行,需要将复制的内容粘贴上去,并按Enter键
在这里插入图片描述
结果如下:
在这里插入图片描述

1.2 放入背景图片

将背景图片放入img文件夹,并重命名为background.jpg

2、写html文件

可以先在main文件夹中,新建txt文件,然后更改后缀名,之后的弹窗点击确定即可。
在这里插入图片描述
右键打开main.html文件,进行编辑

<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>3D相册</title>
<style type="text/css">@charset "utf-8";*{margin:0;padding:0;}body{background-image: url("../img/background.jpg");background-size: 100% 100%;background-attachment: fixed;}li{list-style: none;}.box{width:200px;height:200px;background-size: cover;background-repeat: no-repeat;background-attachment: fixed;background-size:100% 100%;position: absolute;margin-left: 42%;margin-top: 22%;-webkit-transform-style:preserve-3d;-webkit-transform:rotateX(13deg);-webkit-animation:move 5s linear infinite;}.minbox{width:100px;height:100px;position: absolute;left:50px;top:30px;-webkit-transform-style:preserve-3d;}.minbox li{width:100px;height:100px;position: absolute;left:0;top:0;}.minbox li:nth-child(1){background: url(../img/01.png) no-repeat 0 0;-webkit-transform:translateZ(50px);}.minbox li:nth-child(2){background: url(../img/02.png) no-repeat 0 0;-webkit-transform:rotateX(180deg) translateZ(50px);}.minbox li:nth-child(3){background: url(../img/03.png) no-repeat 0 0;-webkit-transform:rotateX(-90deg) translateZ(50px);}.minbox li:nth-child(4){background: url(../img/04.png) no-repeat 0 0;-webkit-transform:rotateX(90deg) translateZ(50px);}.minbox li:nth-child(5){background: url(../img/05.png) no-repeat 0 0;-webkit-transform:rotateY(-90deg) translateZ(50px);}.minbox li:nth-child(6){background: url(../img/06.png) no-repeat 0 0;-webkit-transform:rotateY(90deg) translateZ(50px);}.maxbox li:nth-child(1){background: url(../img/1.png) no-repeat 0 0;-webkit-transform:translateZ(50px);}.maxbox li:nth-child(2){background: url(../img/2.png) no-repeat 0 0;-webkit-transform:rotateX(180deg) translateZ(50px);}.maxbox li:nth-child(3){background: url(../img/3.png) no-repeat 0 0;-webkit-transform:rotateX(-90deg) translateZ(50px);}.maxbox li:nth-child(4){background: url(../img/4.png) no-repeat 0 0;-webkit-transform:rotateX(90deg) translateZ(50px);}.maxbox li:nth-child(5){background: url(../img/5.png) no-repeat 0 0;-webkit-transform:rotateY(-90deg) translateZ(50px);}.maxbox li:nth-child(6){background: url(../img/6.png) no-repeat 0 0;-webkit-transform:rotateY(90deg) translateZ(50px);}.maxbox{width: 800px;height: 400px;position: absolute;left: 0;top: -20px;-webkit-transform-style: preserve-3d;}.maxbox li{width: 200px;height: 200px;background: #fff;border:1px solid #ccc;position: absolute;left: 0;top: 0;opacity: 0.2;-webkit-transition:all 1s ease;}.maxbox li:nth-child(1){-webkit-transform:translateZ(100px);}.maxbox li:nth-child(2){-webkit-transform:rotateX(180deg) translateZ(100px);}.maxbox li:nth-child(3){-webkit-transform:rotateX(-90deg) translateZ(100px);}.maxbox li:nth-child(4){-webkit-transform:rotateX(90deg) translateZ(100px);}.maxbox li:nth-child(5){-webkit-transform:rotateY(-90deg) translateZ(100px);}.maxbox li:nth-child(6){-webkit-transform:rotateY(90deg) translateZ(100px);}.box:hover ol li:nth-child(1){-webkit-transform:translateZ(300px);width: 400px;height: 400px;opacity: 0.8;left: -100px;top: -100px;}.box:hover ol li:nth-child(2){-webkit-transform:rotateX(180deg) translateZ(300px);width: 400px;height: 400px;opacity: 0.8;left: -100px;top: -100px;}.box:hover ol li:nth-child(3){-webkit-transform:rotateX(-90deg) translateZ(300px);width: 400px;height: 400px;opacity: 0.8;left: -100px;top: -100px;}.box:hover ol li:nth-child(4){-webkit-transform:rotateX(90deg) translateZ(300px);width: 400px;height: 400px;opacity: 0.8;left: -100px;top: -100px;}.box:hover ol li:nth-child(5){-webkit-transform:rotateY(-90deg) translateZ(300px);width: 400px;height: 400px;opacity: 0.8;left: -100px;top: -100px;}.box:hover ol li:nth-child(6){-webkit-transform:rotateY(90deg) translateZ(300px);width: 400px;height: 400px;opacity: 0.8;left: -100px;top: -100px;}@keyframes move{0%{-webkit-transform: rotateX(13deg) rotateY(0deg);}100%{-webkit-transform:rotateX(13deg) rotateY(360deg);}}
</style>
</head>
<body>
<div class="box"><ul class="minbox"><li></li><li></li><li></li><li></li><li></li><li></li></ul><ol class="maxbox"><li></li><li></li><li></li><li></li><li></li><li></li></ol>
</div>
<iframe frameborder="no" border="0" marginwidth="0" marginheight="0" width=330 height=86 
src="http://music.163.com/outchain/player?type=2&id=579954&auto=1&height=66" 
style="top:0px;position:absolute;z-index:2;left:0px"></iframe></body>
</html>
2.1 更换音乐素材

在代码的第213行,替换音乐的链接即可。
在这里插入图片描述

3、运行main.html

在这里插入图片描述
在这里插入图片描述

四、推荐阅读

《解决audio自动播放无效问题》


http://chatgpt.dhexx.cn/article/ahhqgber.shtml

相关文章

斐波那契数列求和公式

斐波那契数列指的是这样一个数列&#xff1a;1、1、2、3、5、8、13、21、……    这个数列从第三项开始&#xff0c;每一项都等于前两项之和。它的通项公式为:(见下图)&#xff08;又叫“比内公式”&#xff0c;是用无理数表示有理数的一个范例。&#xff09; 斐波那契数列求…

斐波那契数列之python(5种方法)

斐波那契数列&#xff08;Fibonacci sequence&#xff09;&#xff0c;又称黄金分割数列、因数学家列昂纳多斐波那契&#xff08;Leonardoda Fibonacci&#xff09;以兔子繁殖为例子而引入&#xff0c;故又称为“兔子数列”&#xff0c;指的是这样一个数列&#xff1a;1、1、2、…

斐波那契数列(C/C++)

目录 背景介绍 解法1&#xff1a;非数组非递归 解法2&#xff1a;数组非递归 解法3&#xff1a;非数组递归 解法4&#xff1a;数组递归 背景介绍 斐波那契数列&#xff0c;又称黄金分割数列&#xff0c;指的是这样一个数列&#xff1a;0、1、1、2、3、5、8、13、21、34、…

关于斐波那契数列通项公式证明以及推广

在我们中学的时候老师都会举一个著名的兔子繁殖的例子&#xff1a;一般而言&#xff0c;兔子在出生两个月后&#xff0c;就有繁殖能力&#xff0c;一对兔子每个月能生出一对小兔子来。如果所有兔子都不死&#xff0c;那么一年以后可以繁殖多少对兔子&#xff1f;而这个问题就是…

斐波那契数列的四种解法

题目描述 斐波那契数列&#xff08;Fibonacci sequence&#xff09;&#xff0c;又称黄金分割数列&#xff0c;因数学家莱昂纳多斐波那契&#xff08;Leonardo Fibonacci&#xff09;以兔子繁殖为例子而引入&#xff0c;故又称为“兔子数列”&#xff0c;指的是这样一个数列&a…

斐波那契数列通项公式的求法

以下两种方法其实是一样的 1、方法一 其实所有人都知道T(n) T(n-1) T(n-2), T(1) T(2)1,T(n)也是一个斐波那契数列&#xff0c;求解时间复杂度的本质也就是求数列通项&#xff0c;结果MB的一个通项就把我难住了&#xff0c;只好回来google一下&#xff0c;把高中数学用的求…

【算法】斐波那契数列通项公式

特征方程和通项公式 如果数列 a n a_n an​的递推公式&#xff1a; a n c 1 a n − 1 c 2 a n − 2 a_nc_1a_{n-1}c_2a_{n-2} an​c1​an−1​c2​an−2​------(1) 根据待定系数法&#xff0c;假设 a n − x a n − 1 y ( a n − 1 − x a n − 2 ) a_n-xa_{n-1}y(a_{n-1…

斐波那契数列通项公式的推导证明----举一反三

斐波那契数列通项公式的推导证明----举一反三 1-前言2-斐波那契2-1-什么是斐波那契2-2-通项公式的证明2-3-举一反三 1-前言 2021年5月20号的那天&#xff0c;有对象的都忙着约会秀恩爱&#xff0c;而我这样的单身狗&#xff0c;只能自己学习沉淀自己&#xff0c;为梦想而奔波&a…

七种方式求斐波那契(Fibonacci)数列通项

一&#xff1a;递归实现   使用公式f[n]f[n-1]f[n-2]&#xff0c;依次递归计算&#xff0c;递归结束条件是f[1]1&#xff0c;f[2]1。 二&#xff1a;数组实现   空间复杂度和时间复杂度都是0(n)&#xff0c;效率一般&#xff0c;比递归来得快。 三&#xff1a;vector<in…

响应式 - 基于尺寸的响应式内边距

前言 为了衬托一个响应式宽度的图像元素&#xff0c;需要添加相对的内边距。如果使用静态的宽度内边距&#xff0c;图像内边距在较小的浏览器窗口中可能会显得过大&#xff0c;从而与其他附近元素相互挤压&#xff0c;甚至可能将图像挤出屏幕。 准备工作 理解盒模型属性的计算…

响应式 - 基于min-width和max-width属性的响应式布局

前言 响应式布局的很多解决方案都相当复杂&#xff0c;但是本节中的方法却非常简单。该方法通过在3个浮动元素上设置min-width和max-width属性来实现响应式布局。只要采用CSS中这个非常简单的响应式布局特性&#xff0c;就能够适应移动设备和不同尺寸的计算机屏幕。 准备工作 …

【愚公系列】2023年07月 WPF+上位机+工业互联 002-WPF布局控件

文章目录 前言一、WPF布局控件1.无边框设计2.理解布局2.1 WPF的布局处理2.1 布局原则2.3 布局过程 3.布局控件3.1 Grid控件3.1.1 属性3.1.2 案例 3.2 StackPanel控件3.2.1 属性3.2.2 案例 3.3 DockPanel3.3.1 属性3.3.2 案例 3.4 WrapPanel3.4.1 属性3.4.2 案例 3.5 UniformGri…

WordPress响应式主题:Three/博客/CMS/博客导航三合一主题

效果演示:http://cxyo.vip/ 下载地址在最后面 主题使用说明 1、首页设置 ①选择首页布局&#xff1a;博客布局或杂志布局或博客导航&#xff0c;默认博客布局&#xff0c;若选择杂志布局或博客导航后&#xff0c;必须设置CMS/导航布局后才能正常显示&#xff0c;否则会错位。…

使用dedecms构建响应式站点(二)——系统设置

在上一篇文章中&#xff0c;我们介绍了使用dedecms构建响应式站点的安装部分&#xff0c;这一次&#xff0c;我们来讲讲dedecms系统安装后的初始状态下如何进行各项系统设置。 进入管理后台后&#xff0c;我们会看到系统的管理菜单&#xff0c;如下图所示&#xff1a; 通过菜单…

浏览器请求与响应全过程详解

3. 浏览器请求与响应全过程详解 前言 当在浏览器上输入一个网站链接时&#xff0c;它是如何运行将网页内容呈现在我们的浏览器上的呢&#xff1f; 本文旨在对www.yangoogle.com网页进行详细分析&#xff0c;了解浏览器展示内容的整个流程。下图是在网上检索到一个较清晰的流程…

android创建布局文件,android学习——Android Studio下创建menu布局文件

一、问题: android studio项目中没有看到menu文件夹: 在android studio项目中想要添加menu布局文件,一开始我的做法是:直接在res文件夹右键选择xml文件来添加,如下图: 但是会发现新建的布局文件好像很奇怪,不能添加menu以及item,如下图: 二、解决办法: 经过百度才知道…

当前比较流行的页面布局方式

1.固定宽度布局&#xff1a;当前各大网站的页面都是固定宽度布局。 优点&#xff1a;更好的适应当前市场上所有的设备&#xff1a;我们知道当前市面上主流的集中分辨率为以下几种 800*600 1024*768 1280*1024等属于普通显示器所支持的分辨率 1280*800 一般是14宽屏笔记本的最…

响应式 概念

&#xfeff;&#xfeff; 原文地址&#xff1a;http://isux.tencent.com/responsive-web-design.html 概念 响应式网页设计最初是由 Ethan Marcotte 提出的一个概念&#xff1a;为什么一定要为每个用户群各自打造一套设计和开发方案&#xff1f;Web设计应该做到根据不同设备环…

【iOS架构】iOS ReactiveCocoa函数响应式编程

声明式编程 声明式编程&#xff08;declarative programming&#xff09;是一种编程范型&#xff0c;与命令式编程相对立。它描述目标的性质&#xff0c;让电脑明白目标&#xff0c;而非流程。声明式编程不用告诉电脑问题领域&#xff0c;从而避免随之而来的副作用&#xff0c;…