资源简介

信息隐藏作业。使用python实现幻方置乱,里面的幻方函数生成是从借鉴的别人的,压缩包的内容是PYcharm的工程文件。其中,TPYCL.py是运行的程序,里面的幻方生成为奇数,若想要奇偶均可,可以使用里面另外一个幻方生成.py文件进行替换。注意,里面的a.jpg不能太大,不然耗时会特别长;TPYCL.py里面对图片仅进行了20次置乱,你可以随意更改。置乱n²次后,图片恢复到原来的状态。

资源截图

代码片段和文件信息

#!/usr/bin/python3
from PIL import Image
import numpy as np
import numpy
import time
import math

#列表循环向左移offset位
def shift_left(lst offset):
    return [lst[(i+offset)%len(lst)] for i in range(len(lst))]

#列表循环向右移offset位
def shift_right(lst offset):
    return [lst[i-offset] for i in range(len(lst))]

#构造奇数阶幻方函数
def magic_of_odd_order(n):
    p = (int)((n-1)/2)

    #创建矩阵1
    initial_lst1 = list(range(p+1n))+list(range(p+1))
    initial_mat1 = []
    for i in range(n):
        initial_mat1.append(shift_left(initial_lst1 i))
    mat1 = np.array(initial_mat1)

    #创建矩阵2
    initial_lst2 = list(range(p-1-1))+list(range(2*pp-1))
    initial_mat2 = []
    for i in range(n):
        initial_mat2.append(shift_right(initial_lst2 i))
    mat2 = np.array(initial_mat2)

    #创建矩阵3即元素全为1的矩阵
    mat3= np.ones((nn)dtype=np.int)

    #构造幻方
    magic = n*mat2+mat1+mat3
    return magic



#主函数
def main():
    a = Image.open(“a.jpg“)  # 打开图像
    b = numpy.array(a)  # 图片转数组
    print(b)  # 输出图片数组
    image_shape = []  # 定义一个list
    image_shape = b.shape  # 将图片像素大小传入list中
    print(image_shape[1])  # 测试,输出图片的宽度
    print(b.shape)  # 测试,输出图片的大小(3753753)
    c = Image.fromarray(b)  # 数组转图片
    c.show()  # 显示图片

    order = image_shape[1]

    if order%2 ==1:
        magic = magic_of_odd_order(order)
    else:
        print(“图片不合法!“)

    for row in magic:  #在magic的每行循环
        for col in row:#在每行中循环输出每个元素
            print(col end=‘\t‘)
        print()

    #开始置换幻方矩阵和图片矩阵(一次)
    for change_num in range(020):
        for i in range(0image_shape[0]):
            for j in range(0image_shape[0]):
                # 判断magic[i][j]是否为幻方矩阵的最大值,如果是最大值,则将其置为1,将等于1的那一位置为0
                if magic[i][j] == math.pow(image_shape[0]2):
                    for i_ in range(0 image_shape[0] 2):
                        for j_ in range(0 image_shape[0] 2):
                            if magic[i_][j_] == 1 :
                                t = magic[i][j]
                                magic[i][j] = magic[i_][j_]
                                magic[i_][j_] = t
                                #交换图片数组中对应的元素
                                temp_ = b[i][j]
                                b[i][j] = b[i_][j_]
                                b[i_][j_] = temp_
                else:
                    for i_ in range(0 image_shape[0] 2):
                        for j_ in range(0 image_shape[0] 2):
                            if magic[i_][j_] == (magic[i][j] - 1) :
                                t = magic[i][j]
                                magic[i][j] = magic[i_][j_]
                                magic[i_][j_] = t
                                # 交换图片数组中对应的元素
                                temp = b[i][j]
                                b[i][j] = b[i_][j_]
                                b[i_][j_] = temp

    c = Image.fromarray(b)  # 数组转图片
    c.show()  # 显示图片

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----
     目录           0  2018-05-23 16:29  .idea\
     文件         213  2018-05-12 10:41  .idea\misc.xml
     文件         282  2018-05-12 10:41  .idea\modules.xml
     文件       24855  2018-05-23 16:29  .idea\workspace.xml
     文件         398  2018-05-12 10:41  .idea\鍥剧墖棰勫鐞?iml
     文件        6300  2018-05-23 15:47  a.jpg
     文件           7  2018-05-11 15:54  cmd.cmd
     文件        3452  2018-05-23 15:42  TPYCL.py
     文件        3216  2018-05-11 16:10  骞绘柟鏁扮粍鐨勭敓鎴?py

评论

共有 条评论