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
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
<?php
ini_set('display_errors', 'On');
error_reporting(E_ALL);
function blackWhite($sFile, $bSave = false)
{
// Parameters voor het opslaan van de afbeelding
// Alleen beschikbaar als $bSave == true.
$sPrefix = 'bw_';
$sDir = 'black_white/';
function grayScale($r, $g, $b)
{
// Formules volgen uit wat ooit voor zwart-wit televisie gebruikt werd
return (($r*0.299)+($g*0.587)+($b*0.114));
}
// Breedte en hoogte bronafbeelding ophalen
list($iWidth, $iHeight) = getimagesize($sFile);
// Benodigde resources aanmaken
$rSource = imagecreatefromjpeg($sFile);
$rBlackWhite = imagecreate($iWidth, $iHeight);
// Palette met grijstinten aanmaken.
$aPalette = array();
for($i = 0; $i < 256; $i++)
{
$aPalette[$i] = imagecolorallocate($rBlackWhite, $i, $i, $i);
}
// Pixel voor pixel doorlopen en omzetten
for($x = 0; $x < $iWidth; $x++)
{
for($y = 0; $y < $iHeight; $y++)
{
// RGB waarden bepalen
$iRgb = imagecolorat($rSource, $x, $y);
$iR = ($iRgb >> 16) & 0xFF;
$iG = ($iRgb >> 8) & 0xFF;
$iB = $iRgb & 0xFF;
// Grijswaarde bepalen en pixel omzetten
$iGrayScale = grayScale($iR, $iG, $iB);
imagesetpixel($rBlackWhite, $x, $y, $aPalette[$iGrayScale]);
}
}
// Weergeven of opslaan
if($bSave)
{
// Affbeelding opslaan op locatie
$sLocation = $sDir.$sPrefix.basename($sFile);
imagejpeg($rBlackWhite, $sLocation);
}
else
{
// Juiste header zetten en afbeelding teruggeven
header('Content-type: image/jpeg');
imagejpeg($rBlackWhite);
}
}
if(isset($_GET['file']) && file_exists($_GET['file']))
{
blackWhite($_GET['file']);
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>PHPtuts.nl - PHP Snippets - Afbeeldingen in zwart-wit tonen met GD</title>
<link rel="stylesheet" href="../../styles/default.css" type="text/css" media="screen" />
<link rel="stylesheet" href="../../styles/ubb.css" type="text/css" media="screen" />
<style type="text/css">
#images {
margin: 10px;
}
</style>
</head>
<body>
<div id="wrap">
<p class="none small align-right"><a href="/codeSnippets/"><-- Terug naar Snippets</a></p>
<h1>Afbeeldingen in zwart-wit tonen met GD</h1>
<div id="info">
<p>PHP versie: n.v.t</p>
<p>Javascript: n.v.t</p>
</div>
<p>Een afbeelding in kleur omzetten naar een zwart-wit afbeelding is mogelijk met de GD library van PHP. Het originele script is op <a href="http://php.about.com/od/gdlibrary/ss/grayscale_gd_2.htm" target="_blank">deze website</a> te vinden. Ik heb het in een php functie gegoten die eenvoudig gebruikt kan worden om on-the-fly afbeeldingen in grijstinten te creëren.</p>
<p>Deze functie is op dit moment alleen geschikt voor JPEG afbeeldingen, maar is eenvoudig uit te breiden.</p>
<div id="images">
<img src="black_white/sprinkhaan.jpg" alt="Sprinkhaan in kleur" />
<img src="black_white.php?file=black_white/sprinkhaan.jpg" alt="Sprinkhaan in zwart-wit" />
</div>
<?php
// Weergeven broncode
define('FILE', __FILE__);
require_once('../broncode.php');
?>
</div>
<!-- Google analytics (geen onderdeel van script) -->
<script type="text/javascript" src="/inc/ga1.js"></script>
<script type="text/javascript" src="/inc/ga2.js"></script>
</body>
</html>