简单的照片墙制作

首先,创建一个div 标签,为整个相册的框架。

   <body>
        <div id="wrap">        
        </div>  
    </body>

利用css将这个div居中到浏览器

    *{
       margin: 0;
       padding: 0;
    }
    html,body{
        height: 100%;
    }
    #wrap{
        width: 90%;
        height: 90%;
        border: 2px solid #cccccc;
        position: absolute;
        top: 5%;
        left: 5%; 
    }
  • 然后导入照片墙中的照片。
    注意这里不是在 div下面直接导入各个照片,
    如果直接导入的话,照片数量太多,会十分麻烦。

    所以这里运用Jquery 写一个简单的算法,导入图片(24张图)。

	<script>
  	$(function(){
    // 存图片路径
    let imgs=[];
    creatediv();
    init();
    function creatediv(){
        // 生成24个div
        for(let i=1; i<=24 ; i++){
            imgs.push("images/"+i+".jpg");
            /*
            这里需要注意的是,需要将图片的名称改成1.jpg 2.jpg...  
            并放在同一个目录下面的文件夹内。
            */
            // 创建div
            let $div=$("<div></div>");
            // 为div添加背景图 即各个照片按for循环的顺序,一次插入。
            $div.css({
                "background":"url(images/"+i+".jpg)",
                //背景图缩放  
                "background-size":"125px 125px"
            });
            // 将div添加到wrap中
            $("#wrap").append($div); 
        }
    }
    利用css 给每一个div一个尺寸 125*125px
    wrap>div{
        width:125px;
        height: 125px; 
    }
  • 写到这里,会发现,导入进来的照片只有显示在最左侧。

  • 这里用到了 24 张图 把24张图均匀的放在 整个框架中。

  • 1、先定位,把24张图都放在左上角。

     给每个div一个定位。
     #wrap>div{
         width:125px;
         height: 125px; 
         position: absolute;
         left: 0;
         top: 0;
         box-shadow: 1px 1px 10px #f32fb2;//背景色,阴影等。
         cursor: pointer;// 鼠标移动上去 变成手。
     } 
    
  • 2、然后利用索引,算出每行每列图片的位置。
    在这里插入图片描述
    行数除以6 商的整数部分为Y坐标,余数为X坐标

     function init(){
         $("#wrap>div").each(function(index,element){
             //计算行索引和列索引
             let x=parseInt(index/6);
             let y = index%6;
             // 计算行间隔和列间隔
             // 列间隔(wrap的宽度-6*小图的宽度)/5
             let yspan=($("#wrap").width()-6*125)/5;
             // 行间隔(wrap的高度-4*小图的高度)/5
             let xspan = ($("#wrap").height()-4*125)/3;
             //计算每个图片距离上边边界和左边边界的距离
             //图片距左的距离: 列的索引*(小图宽度+列间隔)
             //图片距顶的距离: 行的索引*(小图高度+行间隔)
             let _left = y*(yspan+125);
             let _top = x*(xspan+125);
            
             //生成随机数
             let r = Math.random()*60-30;
             $(element).css({
                 "top":_top+"px",
                 "left":_left+"px",
                 "transform":"scale(0.9) rotate("+r+"deg)"
                 // 添加一个随机选装角度。
             });
         });
     }  
    
  • 效果图如下在这里插入图片描述

    点击任意一张图片,其他23张图全部变为这张图的一部分,并合成一张完整的图。
    在这里插入图片描述

    在这里插入代码片//给每一个div 一个点击事件

     $("#wrap>div").click(function(){
         let i = $(this).index();
         $("#wrap>div").each(function(index,element){
             //计算行索引和列索引
             let x=parseInt(index/6);
             let y=index%6;
             //计算图片的偏移量
             $(element).css({
                 "background":"url("+imgs[i]+")",
     			"background-position":"-"+(y*125)+"px -"+(x*125)+"px",
     			"box-shadow":"0 0 0 0",
     			"transform":"rotate(0deg)"
             });
             // 计算图片距离左和上的距离
             // 计算左空白  (wrap的宽度- 6*小图的宽度)/2;
             // 计算上空白  (wrap的高度- 4*小图的宽度)/2;
             let leftspan = ($("#wrap").width()-6*125)/2;
             let topspan = ($("#wrap").height()-4*125)/2;
             // 图片距离左边的距离 列索引*小图宽度+左空白;
             // 图片距离顶部的距离 行索引*小图高度+上空白;
             let _left = y*125+leftspan;
             let _top  = x*125+topspan;
             setTimeout(function(){
                 $(element).css({
                     "top":_top+"px",
                     "left": _left+"px"
                 })
    
             })
         })
    
     })        
    

最后 合成一张图片。在这里插入图片描述
源代码:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <meta name="viewport" content="width=device-width, initial-scale=1.0">
    <meta http-equiv="X-UA-Compatible" content="ie=edge">
    <title>照片墙</title>
    <style>
        *{
           margin: 0;
           padding: 0;
        }
        html,body{
            height: 100%;
        }
        #wrap{
            width: 90%;
            height: 90%;
            border: 2px solid #cccccc;
            position: absolute;
            top: 5%;
            left: 5%; 
        }
        #wrap>div{
            width:125px;
            height: 125px; 
            position: absolute;
            left: 0;
            top: 0;
            box-shadow: 1px 1px 10px #f32fb2;
            cursor: pointer;
            transition: 1.5s;  
        }
    </style>
</head>
<body>
        <div id="wrap">
           
        </div>
    
</body>
<script src="jquery.min.js"></script>
<script>

    $(function(){
        // console.log("aaaaaaaaaaa");
        // 存图片路径
        let imgs=[];
        creatediv();
        init();
        function creatediv(){
            // 生成24个div
            for(let i=1; i<=24 ; i++){
                imgs.push("images/"+i+".jpg");
                // 创建div
                let $div=$("<div></div>");
                // 为div添加背景图
                $div.css({
                    "background":"url(images/"+i+".jpg)",
                    "background-size":"125px 125px"
                });
                // 将div添加到wrap中
                $("#wrap").append($div); 
            }
        }

        function init(){
            $("#wrap>div").each(function(index,element){
                //计算行索引和列索引
                let x=parseInt(index/6);
                let y = index%6;
                // 计算行间隔和列间隔
                // 列间隔(wrap的宽度-6*小图的宽度)/5
                let yspan=($("#wrap").width()-6*125)/5;
                // 行间隔(wrap的高度-4*小图的高度)/5
                let xspan = ($("#wrap").height()-4*125)/3;
                //计算每个图片距离上边边界和左边边界的距离
                //图片距左的距离: 列的索引*(小图宽度+列间隔)
                //图片距顶的距离: 行的索引*(小图高度+行间隔)
                let _left = y*(yspan+125);
                let _top = x*(xspan+125);
                //生成随机数
                let r = Math.random()*60-30;


                $(element).css({
                    "top":_top+"px",
                    "left":_left+"px",
                    "transform":"scale(0.9) rotate("+r+"deg)"
                });
            });
        }  

        //给每一个div 一个点击事件
        $("#wrap>div").click(function(){
            let i = $(this).index();
            $("#wrap>div").each(function(index,element){
                //计算行索引和列索引
                let x=parseInt(index/6);
                let y=index%6;
                //计算图片的偏移量
                $(element).css({
                    "background":"url("+imgs[i]+")",
					"background-position":"-"+(y*125)+"px -"+(x*125)+"px",
					"box-shadow":"0 0 0 0",
					"transform":"rotate(0deg)"
                });
                // 计算图片距离左和上的距离
                // 计算左空白  (wrap的宽度- 6*小图的宽度)/2;
                // 计算上空白  (wrap的高度- 4*小图的宽度)/2;
                let leftspan = ($("#wrap").width()-6*125)/2;
                let topspan = ($("#wrap").height()-4*125)/2;
                // 图片距离左边的距离 列索引*小图宽度+左空白;
                // 图片距离顶部的距离 行索引*小图高度+上空白;
                let _left = y*125+leftspan;
                let _top  = x*125+topspan;
                setTimeout(function(){
                    $(element).css({
                        "top":_top+"px",
                        "left": _left+"px"
                    })

                })
            })

        })        
    });
    </script>
</html>
  • 1
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
制作照片墙的方法有很多种,其中一种简单的方法是使用Python的Pillow库来操作图片。以下是一个简单的Python程序,可以将给定文件夹中的所有图片合成为一个照片墙。 首先,你需要安装Pillow库: ``` pip install Pillow ``` 然后,可以使用以下代码来制作照片墙: ```python from PIL import Image import os # 设置照片墙的大小和每张照片的大小 wall_width = 800 wall_height = 600 image_width = wall_width // 4 image_height = wall_height // 4 # 设置照片墙的背景颜色 wall_color = (255, 255, 255) # 设置照片所在的文件夹 image_folder = 'path/to/folder' # 获取文件夹中所有图片的路径 image_paths = [os.path.join(image_folder, f) for f in os.listdir(image_folder) if f.endswith('.jpg')] # 计算照片墙的行数和列数 num_rows = wall_height // image_height num_cols = wall_width // image_width # 创建一个新的空白照片墙 wall = Image.new('RGB', (wall_width, wall_height), wall_color) # 遍历所有照片,并将它们放置在照片墙上 for i, path in enumerate(image_paths): # 打开照片并调整大小 image = Image.open(path) image = image.resize((image_width, image_height)) # 计算照片应该放置的位置 row = i // num_cols col = i % num_cols x = col * image_width y = row * image_height # 将照片放置在照片墙上 wall.paste(image, (x, y)) # 显示照片墙 wall.show() # 保存照片墙到文件 wall.save('path/to/wall.jpg') ``` 这个程序将会把给定文件夹中的所有jpg图片合并成一个800x600的照片墙,并且保存到文件中。你可以根据需要调整照片墙的大小和每张照片的大小,也可以修改照片墙的背景颜色。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值