当前位置: 首页 > wzjs >正文

网络营销是什么工作职位seo优化常识

网络营销是什么工作职位,seo优化常识,微信第三方网站怎么做,大型网站的mssql数据库要付费吗by Li y.c. 一、内容简介 本文介绍一种简单的图片加/解密算法,算法的基本原理十分简单,即逐个(逐行、逐列)地获取图片的像素点颜色值,对其进行一些简单的算数运算操作进行加密,解密过程则相应地为加密运算…

by Li y.c.

一、内容简介

本文介绍一种简单的图片加/解密算法,算法的基本原理十分简单,即逐个(逐行、逐列)地获取图片的像素点颜色值,对其进行一些简单的算数运算操作进行加密,解密过程则相应地为加密运算的逆运算。

二、图片表示基础

在计算机中,图片(我们使用.jpg文件作为示例)在内存中是使用RGB数组进行存储,举例:

在这里插入图片描述

以上图片中,每一个像素点用一个rgb值表示,一般为6位16进制数,例如0x123456,这里0x12表示红度(RED)值,0x34表示绿度(GREEN)值,0x56表示蓝度(BLUE)值。注意到,两位16进制数的取值范围为0~255(0x00到0xFF)。

三、R/G/B值的获取

假如我们知道当前像素点的rgb值为0x123456,如何从中获取到分离的r/g/b值呢?通过简单的位运算即可。如以下java代码:

public class RGBTest {public static void main(String[] args) {String format1 = String.format("%x", (0x123456 >> 16));  // 获取red值(前两位)String format2 = String.format("%x", (0x123456 >> 8) & 0xFF);  // 获取green值(中间两位)String format3 = String.format("%x", (0x123456) & 0xFF);  // 获取blue值(末两位)String format = String.format("%x", (0x123456) & 0xFFFFFF);  // 不做改变System.out.println(format1);System.out.println(format2);System.out.println(format3);System.out.println(format);}
}

运行结果正是我们想要的:

在这里插入图片描述

四、获取整张图片的RGB数组

有了以上的基础,我们就可以将整张图片存储为一个RGB表示的数组,为之后的加/解密操作做基础。使用如下的Java代码:

public List<Integer> getRGB(BufferedImage image, int x, int y) {List<Integer> rgb = new ArrayList<Integer>();if (image != null && x <= image.getWidth() && y <= image.getHeight()) {for (int h = 0; h < y; h++) {for (int w = 0; w < x; w++) {//获得w,h坐标的颜色int pixel = image.getRGB(w, h);rgb.add(pixel);}}}return rgb;}

五、加密函数

我们使用简单的加密操作,即把图片的R/G/B值同时加50后模256(防止值溢出造成噪点【可以想见,若某一通道出现进位,后果是灾难性的】):

// 加密函数public static void Encrypt(Integer[] rgb, int width, int height) {// 输出文件名File file = new File("image_out.jpg");BufferedImage bi = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);Graphics2D g2 = (Graphics2D) bi.getGraphics();for (int h = 0; h < height; h++) {for (int w = 0; w < width; w++) {int color = rgb[w + width * h];int red = color >> 16;int green = (color >> 8) & 0xFF;int blue = color & 0xFF;int red_ = (red + 50) % 256;int green_ = (green + 50) % 256;int blue_ = (blue + 50) % 256;Color c = new Color(red_ << 16 | green_ << 8 | blue_);g2.setColor(c);g2.drawLine(w, h, w + 1, h + 1);}}try {ImageIO.write(bi, "jpg", file);} catch (IOException e) {e.printStackTrace();}}

看看加密效果:(以下代码位于主函数中)

// 加密部分:【image_1_1.jpg】---【image_out.jpg】Image_Encrypt r = new Image_Encrypt();File f = new File("image_1_1.jpg");BufferedImage bi = ImageIO.read(f);int width = bi.getWidth();int height = bi.getHeight();List<Integer> l = null;Integer[] rbg = new Integer[width * height];l = r.getRGB(bi, width, height);
//             查看rgb值:
//            System.out.print(l);for (int i = 0; i < width * height; i++) {rbg[i] = l.get(i);}Encrypt(rbg, width, height);

加密后的图像:

在这里插入图片描述

六、解密函数

解密函数应为加密函数的逆运算,考虑到边缘条件,代码如下:

// 解密函数public static void Decrypt(Integer[] rgb, int width, int height) {// 输出文件名File file = new File("image_out_de.jpg");BufferedImage bi = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);Graphics2D g2 = (Graphics2D) bi.getGraphics();for (int h = 0; h < height; h++) {for (int w = 0; w < width; w++) {int color = rgb[w + width * h];int red = color >> 16;int green = (color >> 8) & 0xFF;int blue = color & 0xFF;int red_;if (red == 255){red_ = 255;}else{red_ = (red - 50 + 255) % 255;}int green_;if (green == 255){green_ = 255;}else{green_ = (green - 50 + 255) % 255;}int blue_;if (blue == 255){blue_ = 255;}else{blue_ = (blue - 50 + 255) % 255;}Color c = new Color(red_ << 16 | green_ << 8 | blue_);g2.setColor(c);g2.drawLine(w, h, w + 1, h + 1);}}try {ImageIO.write(bi, "jpg", file);} catch (IOException e) {e.printStackTrace();}}

解密后的图像却是这样的:

在这里插入图片描述

推测是由于边缘条件造成的,修改代码中……

【debug】
我们写一个测试类,看看从0到255的值里面,是否有不满足该逆运算关系的:

public class Test {public static void main(String[] args){for (int i = 0;i <= 255;i ++){int j = (i + 50) % 256;int j_ = (j - 50 + 256) % 256;if (i != j_){System.out.print("errr");}}}
}

输出如下:

【没有报错】……??

基准测试

加/解密均不做任何操作,直接由三通道的值拼凑出rgb数组:

加密函数

// 加密函数public static void Encrypt(Integer[] rgb, int width, int height) {// 输出文件名File file = new File("image_out.jpg");BufferedImage bi = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);Graphics2D g2 = (Graphics2D) bi.getGraphics();for (int h = 0; h < height; h++) {for (int w = 0; w < width; w++) {int color = rgb[w + width * h];int red = color >> 16;int green = (color >> 8) & 0xFF;int blue = color & 0xFF;// 基准测试int red_ = red;int green_ = green;int blue_ = blue;//                int red_ = (red + 50) % 256;
//                int green_ = (green + 50) % 256;
//                int blue_ = (blue + 50) % 256;Color c = new Color(red_ << 16 | green_ << 8 | blue_);g2.setColor(c);g2.drawLine(w, h, w + 1, h + 1);}}try {ImageIO.write(bi, "jpg", file);} catch (IOException e) {e.printStackTrace();}}

解密函数

// 解密函数public static void Decrypt(Integer[] rgb, int width, int height) {// 输出文件名File file = new File("image_out_de.jpg");BufferedImage bi = new BufferedImage(width, height,BufferedImage.TYPE_INT_RGB);Graphics2D g2 = (Graphics2D) bi.getGraphics();for (int h = 0; h < height; h++) {for (int w = 0; w < width; w++) {int color = rgb[w + width * h];int red = color >> 16;int green = (color >> 8) & 0xFF;int blue = color & 0xFF;// 基准测试int red_ = red;int green_ = green;int blue_ = blue;
//                int red_;
//                if (red == 255){
//                    red_ = 255;
//                }
//                else{
//                    red_ = (red - 50 + 256) % 256;
//                }//                int green_;
//                if (green == 255){
//                    green_ = 255;
//                }
//                else{
//                    green_ = (green - 50 + 256) % 256;
//                }//                int blue_;
//                if (blue == 255){
//                    blue_ = 255;
//                }
//                else{
//                    blue_ = (blue - 50 + 256) % 256;
//                }Color c = new Color(red_ << 16 | green_ << 8 | blue_);g2.setColor(c);g2.drawLine(w, h, w + 1, h + 1);}}try {ImageIO.write(bi, "jpg", file);} catch (IOException e) {e.printStackTrace();}}

文章转载自:

http://c8EdfwbM.crkhd.cn
http://nsfry6Vm.crkhd.cn
http://gH68FnDD.crkhd.cn
http://JD7k157f.crkhd.cn
http://m1jPsxY9.crkhd.cn
http://AlhBzXzl.crkhd.cn
http://WcaNefWV.crkhd.cn
http://4tufMF6P.crkhd.cn
http://eV8R1Uze.crkhd.cn
http://o9s0hclR.crkhd.cn
http://hh4Znfek.crkhd.cn
http://IgndDjzC.crkhd.cn
http://SdU4fZ4J.crkhd.cn
http://XkX4bZ07.crkhd.cn
http://LFsPu2Ft.crkhd.cn
http://HTSh5Kt3.crkhd.cn
http://qVGF1Tre.crkhd.cn
http://Bgzae4pA.crkhd.cn
http://ERORauSy.crkhd.cn
http://B9lNH9Mv.crkhd.cn
http://pn2JqDvQ.crkhd.cn
http://W5Wr0vhF.crkhd.cn
http://AAlP3TA8.crkhd.cn
http://7Ipu6FL3.crkhd.cn
http://3fq0w3rD.crkhd.cn
http://hSW2kWW4.crkhd.cn
http://FBMpzEfE.crkhd.cn
http://3fpJFWXg.crkhd.cn
http://2rauNOtd.crkhd.cn
http://ldLsGWrs.crkhd.cn
http://www.dtcms.com/wzjs/615717.html

相关文章:

  • 简易的网站模板网络运营商有哪些
  • 加盟网站推广简约型网站建设
  • wordpress 网站前端显示wordpress 文章 模型
  • 学校网站建设报价单辽宁建设工程信息网官网查询
  • 南昌网站设计资讯做哪个视频网站赚钱的
  • 网站点击率如何做网站后台怎么进入wordpress
  • 佛山营销网站开发怎么选农村建设捐款网站
  • 织梦如何做中英文版的网站手机制作网站软件下载
  • 台州国强建设网站佛山高明网站建设设计
  • 海口 网站 制作黑帽seo培训网
  • wordpress建站平台高校建设主流网站
  • 洛阳网站建设优化案例wordpress oa教程
  • 重庆建工网深圳seo推广公司
  • 做企业网站公司如何在百度上发自己的广告?
  • 百度做网站刷排名网络设计师学什么专业
  • 全景网站制作教程平面设计公司理念
  • 资料库网站应该怎么做wordpress前端接口
  • 购物网站建设实训心得体会实训课做一个网站怎么做
  • 建设网站需要什么信息网站ico如何添加
  • 课堂资源管理网站开发需求分析网站建设存在风险
  • php mysql 企业网站源码西安外贸网站建设公司
  • 比特币支付网站建设南通市交通建设处网站
  • 分页网站小企业门户网站建设
  • 做淘宝客必须有网站吗wordpress播放器插件
  • 备案网站建设承诺书郑州最好的精神病医院
  • 商城县建设局网站2345浏览器
  • 当阳网站建设建网站可行性分析
  • 二手房出售泉州seo网站排名
  • 查重网站开发深圳网站优化运营
  • 众包网站建设那里可以建设网站