1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
<?php
// 定义要隐藏的消息
$message = "Hello, world!";
// 定义封面图像路径
$imagePath = "cover.jpg";
// 定义输出图像路径
$outputPath = "output.jpg";
// 从JPG文件创建图像资源
$c = imagecreatefromjpeg($imagePath);
// 获取图像尺寸
$w = imagesx($c);
$h = imagesy($c);
// 遍历图像每个像素
for ($y = 0; $y < $h; $y++) {
for ($x = 0; $x < $w; $x++) {
// 获取像素的RGB值
$rgb = imagecolorat($c, $x, $y);
$r = ($rgb >> 16) & 0xFF;
$g = ($rgb >> 8) & 0xFF;
$b = $rgb & 0xFF;
// 获取消息中当前字符的ASCII码
$charCode = ord(substr($message, ($y * $w) + $x, 1));
// 将ASCII码转换为二进制
$binary = decbin($charCode);
// 填充二进制值确保8位长度
$binary = str_pad($binary, 8, "0", STR_PAD_LEFT);
// 用二进制值的对应位替换每个RGB值的LSB
$r = ($r & 0xFE) | ($binary[0] & 0x01);
$g = ($g & 0xFE) | ($binary[1] & 0x01);
$b = ($b & 0xFE) | ($binary[2] & 0x01);
// 设置像素的新RGB值
$color = imagecolorallocate($c, $r, $g, $b);
imagesetpixel($c, $x, $y, $color);
}
}
// 保存修改后的图像
imagejpeg($c, $outputPath);
// 释放图像资源
imagedestroy($c);
?>
|