Representation decimal of a color in hexadecimal for use on functions of library GD.
<?php
// Representation hexadecimal
$var = '#FFFFFF';
function getRgbFromGd($color_hex) {
return array_map('hexdec', explode('|', wordwrap(substr($color_hex, 1), 2, '|', 1)));
}
print_r(getRgbFromGd($var));
// Output: Array ( [0] => 255 [1] => 255 [2] => 255 )
?>
GD ve Resim İşlevleri
İçindekiler
- gd_info — Kurulu GD kütüphanesi hakkında bilgi verir
- getimagesize — Bir resmin boyutlarını döndürür
- getimagesizefromstring — Get the size of an image from a string
- image_type_to_extension — Resim türü ile ilgili dosya uzantısını döndürür
- image_type_to_mime_type — getimagesize, exif_read_data, exif_thumbnail, exif_imagetype ile döndürülen resim türü ile ilgili MIME türünü döndürür
- image2wbmp — Bir dosyaya veya tarayıcıya bir WBMP resmi çıktılar
- imageaffine — Return an image containing the affine tramsformed src image, using an optional clipping area
- imageaffinematrixconcat — Concat two matrices (as in doing many ops in one go)
- imageaffinematrixget — Return an image containing the affine tramsformed src image, using an optional clipping area
- imagealphablending — Bir resim için harmanlama kipini etkinleştirir
- imageantialias — Kenar yumuşatma işlevlerini uygulatır
- imagearc — Bir yay çizer
- imagechar — Yatay olarak bir karakter çizer
- imagecharup — Düşey olarak bir karakter çizer
- imagecolorallocate — Bir resim için bir renk ayırır
- imagecolorallocatealpha — Bir resim için alfa kanallı bir renk ayırır
- imagecolorat — Bir pikselin renk indisini döndürür
- imagecolorclosest — Belirtilen rengin en yakın benzerinin indisini döndürür
- imagecolorclosestalpha — Alfası ile birlikte belirtilen rengin en yakın benzerinin renk indisini verir
- imagecolorclosesthwb — En yakın renk sıcaklığına, beyaz ve siyahlığa sahip renk indisini verir
- imagecolordeallocate — Bir rengi tanımsız yapar
- imagecolorexact — Belirtilen rengin indisini döndürür
- imagecolorexactalpha — Alfası ile birlikte belirtilen rengin indisini verir
- imagecolormatch — Bir resmin paletli sürümünün renklerini gerçek renkli sürümünün renkleriyle aynı yapar
- imagecolorresolve — Belirtilen rengin veya en yakın benzerinin indisini döndürür
- imagecolorresolvealpha — Alfası ile birlikte belirtilen rengin veya en yakın benzerinin renk indisini verir
- imagecolorset — Bir palet indisi için renk tanımlar
- imagecolorsforindex — Bir renk indisinin renk bilgisini döndürür
- imagecolorstotal — Bir resim paletindeki renk sayısını döndürür
- imagecolortransparent — Bir rengi şeffaflaştırır
- imageconvolution — Bir konum ve katsayı ile 3x3'lük bir evrişim matrisini uygular
- imagecopy — Bir resim parçasını kopyalar
- imagecopymerge — Bir resmi kopyalar ve karıştırır
- imagecopymergegray — Bir resmi kopyalar ve gri tonlama ile karıştırır
- imagecopyresampled — Resmin bir parçasını örnekleyerek kopyalar ve boyutlandırır
- imagecopyresized — Resmin bir parçasını kopyalar ve boyutlandırır
- imagecreate — Yeni bir paletli resim oluşturur
- imagecreatefromgd2 — Bir GD2 dosyasından veya URL'sinden yeni bir resim oluşturur
- imagecreatefromgd2part — Bir GD2 parça dosyasından veya URL'sinden yeni bir resim oluşturur
- imagecreatefromgd — Bir GD dosyasından veya URL'sinden yeni bir resim oluşturur
- imagecreatefromgif — Bir GIF dosyasından veya URL'sinden yeni bir resim oluşturur
- imagecreatefromjpeg — Bir JPEG dosyasından veya URL'sinden yeni bir resim oluşturur
- imagecreatefrompng — Bir PNG dosyasından veya URL'sinden yeni bir resim oluşturur
- imagecreatefromstring — Belirtilen dizgeden yeni bir resim oluşturur
- imagecreatefromwbmp — Bir WBMP dosyasından veya URL'sinden yeni bir resim oluşturur
- imagecreatefromwebp — Create a new image from file or URL
- imagecreatefromxbm — Bir XBM dosyasından veya URL'sinden yeni bir resim oluşturur
- imagecreatefromxpm — Bir XPM dosyasından veya URL'sinden yeni bir resim oluşturur
- imagecreatetruecolor — Yeni bir gerçek renkli resim oluşturur
- imagecrop — Crop an image using the given coordinates and size, x, y, width and height
- imagecropauto — Crop an image automatically using one of the available modes
- imagedashedline — Kesikli çizgi çizer
- imagedestroy — Bir resmi bellekten siler
- imageellipse — Bir elips çizer
- imagefill — Resmi boyar
- imagefilledarc — Bir yay çizer ve içini doldurur
- imagefilledellipse — İçi dolu bir elips çizer
- imagefilledpolygon — İçi dolu bir çokgen çizer
- imagefilledrectangle — İçi dolu bir dikdörtgen çizer
- imagefilltoborder — Belli bir bölgeyi belli bir renge boyar
- imagefilter — Bir resme bir süzgeç uygular
- imageflip — Flips an image using a given mode
- imagefontheight — Yazı tipi yüksekliğini döndürür
- imagefontwidth — Yazı tipi genişliğini döndürür
- imageftbbox — Bir FreeType2 yazı tipi ile yazılacak bir metnin çerçevesini hesaplar
- imagefttext — Bir metni bir resme bir FreeType 2 yazı tipini kullanarak yazar
- imagegammacorrect — Bir GD resmine gamma düzeltmesi uygular
- imagegd2 — Tarayıcıya veya bir dosyaya bir GD2 resmi çıktılar
- imagegd — Tarayıcıya veya bir dosyaya bir GD resmi çıktılar
- imagegif — Bir dosyaya veya tarayıcıya bir GIF resmi çıktılar
- imagegrabscreen — Ekran görüntüsünü yakalar
- imagegrabwindow — Bir pencereyi yakalar
- imageinterlace — Geçişimliliği açıp kapar
- imageistruecolor — Bir resmin gerçek renkli olup olmadığını bulur
- imagejpeg — Tarayıcıya veya bir dosyaya bir JPEG resmi çıktılar
- imagelayereffect — PHP ile gelen libgd'nin katmanlama etkisini kullanmak için alfa harmanlama seçeneğini ayarlar
- imageline — Bir çizgi çizer
- imageloadfont — Yeni bir bit eşlemli yazı tipi yükler
- imagepalettecopy — Paleti bir resimden diğerine kopyalar
- imagepalettetotruecolor — Converts a palette based image to true color
- imagepng — Tarayıcıya veya bir dosyaya bir PNG resmi çıktılar
- imagepolygon — Çokgen çizer
- imagepsbbox — Bir PostScript Type1 yazı tipi ile yazılan bir metnin çerçevesini döndürür
- imagepsencodefont — Bir yazı tipinin karakter kodlamasını değiştirir
- imagepsextendfont — Bir PS yazı tipini genişletir veya daraltır
- imagepsfreefont — Bir PostScript Type 1 yazı tipi tarafından kullanılan belleği serbest bırakır
- imagepsloadfont — Bir dosyadan bir PostScript Type 1 yazı tipi yükler
- imagepsslantfont — Bir yazı tipini eğer
- imagepstext — PostScript Type1 yazı tiplerini kullanarak bir resmin üzerine bir metin çizer
- imagerectangle — Bir dikdörtgen çizer
- imagerotate — Bir resmi belirtilen açıya göre döndürür
- imagesavealpha — PNG resimleri kaydederken (tek renkli şeffaflığın tersine) alfa kanalı bilgisinin kaydedilip kaydedilmeyeceğini belirtir
- imagescale — Scale an image using the given new width and height
- imagesetbrush — Çizgi çizmek için fırça resmi oluşturur
- imagesetinterpolation — Set the interpolation method
- imagesetpixel — Bir pikselin rengini değiştirir
- imagesetstyle — Çizgi tarzını ayarlar
- imagesetthickness — Çizgi kalınlığını ayarlar
- imagesettile — Resmi doldurmak için döşemeyi etkin kılar
- imagestring — Bir dizgeyi yatay olarak yazar
- imagestringup — Bir dizgeyi 90 derece döndürülmüş olarak yazar
- imagesx — Resmin genişliğini döndürür
- imagesy — Resmin yüksekliğini döndürür
- imagetruecolortopalette — Bir gerçek renkli resmi bir paletli resme dönüştürür
- imagettfbbox — TrueType yazıtipi kullanılan bir metnin çerçevesini döndürür
- imagettftext — Metni resme TrueType yazı tipi ile yazar
- imagetypes — Kurulu PHP'nin desteklediği resim türlerini döndürür
- imagewbmp — Resmi bir dosyaya veya tarayıcıya çıktılar
- imagewebp — Output an WebP image to browser or file
- imagexbm — Bir XBM resmini tarayıcıya veya dosyaya çıktılar
- iptcembed — İkil IPTC verisini bir JPEG resminin içine gömer
- iptcparse — Bir ikil IPTC bloğunu tekil etiketlere böler
- jpeg2wbmp — Bir JPEG dosyasını WBMP dosyasına dönüştürür
- png2wbmp — Bir PNG dosyasını WBMP dosyasına dönüştürür
felipensp at gmail dot com ¶
7 years ago
chuckstudios at gmail dot com ¶
4 years ago
I wrote a simple function to convert an image resource to PGM (portable graymap) in order to feed it to an OCR program. It works just like the rest of the image output functions, and will convert to grayscale for you:
<?php
function imagepgm($image, $filename = null)
{
$pgm = "P5 ".imagesx($image)." ".imagesy($image)." 255\n";
for($y = 0; $y < imagesy($image); $y++)
{
for($x = 0; $x < imagesx($image); $x++)
{
$colors = imagecolorsforindex($image, imagecolorat($image, $x, $y));
$pgm .= chr(0.3 * $colors["red"] + 0.59 * $colors["green"] + 0.11 * $colors["blue"]);
}
}
if($filename != null)
{
$fp = fopen($filename, "w");
fwrite($fp, $pgm);
fclose($fp);
}
else
{
return $pgm;
}
}
?>
dev at kingthief dot com ¶
5 years ago
I've developed a well-documented, fairly rock-solid API for creating on the fly, anti-aliased, rounded corner images, including full alpha transparency support for all you PNG lovers.
go here to download the package:
http://sourceforge.net/projects/roundedphp/
go here for a live demo:
http://dev.kingthief.com/demos/roundedphp/
Installation is similar to PEAR.
Enjoy!
ph_corp at yahoo dot fr ¶
5 years ago
<?php
/**
HSL/RGB conversion functions
very useful for a lot of applications
**/
function RBGtoHSL ( $R, $G, $B )
{
$var_R = ( $R / 255 );
$var_G = ( $G / 255 );
$var_B = ( $B / 255 );
$var_Min = min( $var_R, $var_G, $var_B )
$var_Max = max( $var_R, $var_G, $var_B )
$del_Max = $var_Max - $var_Min
$L = ( $var_Max + $var_Min ) / 2;
if ( $del_Max == 0 )
{
$H = 0
$S = 0
}
else
{
if ( $L < 0.5 )
{
$S = $del_Max / ( $var_Max + $var_Min );
}
else
{
$S = $del_Max / ( 2 - $var_Max - $var_Min );
}
$del_R = ( ( ( $var_Max - $var_R ) / 6 ) + ( $del_Max / 2 ) ) / $del_Max;
$del_G = ( ( ( $var_Max - $var_G ) / 6 ) + ( $del_Max / 2 ) ) / $del_Max;
$del_B = ( ( ( $var_Max - $var_B ) / 6 ) + ( $del_Max / 2 ) ) / $del_Max;
if ( $var_R == $var_Max )
{
$H = $del_B - $del_G;
}
else if ( $var_G == $var_Max )
{
$H = ( 1 / 3 ) + $del_R - $del_B;
}
else if ( $var_B == $var_Max )
{
$H = ( 2 / 3 ) + $del_G - $del_R;
}
if ( $H < 0 )
{
$H += 1;
}
if ( $H > 1 )
{
$H -= 1
}
}
return array( $H, $S, $L );
}
function HuetoRGB( $v1, $v2, $vH )
{
if ( $vH < 0 )
{
$vH += 1;
}
if ( $vH > 1 )
{
$vH -= 1;
}
if ( ( 6 * $vH ) < 1 )
{
return ( $v1 + ( $v2 - $v1 ) * 6 * $vH );
}
if ( ( 2 * $vH ) < 1 )
{
return ( $v2 );
}
if ( ( 3 * $vH ) < 2 )
{
return ( $v1 + ( $v2 - $v1 ) * ( ( 2 / 3 ) - $vH ) * 6 );
}
return ( $v1 )
}
function HSLtoRGB ( $H, $S, $L )
{
if ( $S == 0 )
{
$R = $L * 255;
$G = $L * 255;
$B = $L * 255;
}
else
{
if ( $L < 0.5 )
{
$var_2 = $L * ( 1 + $S );
}
else
{
$var_2 = ( $L + $S ) - ( $S * $L );
}
$var_1 = 2 * $L - $var_2;
$R = 255 * HuetoRGB( $var_1, $var_2, $H + ( 1 / 3 ) );
$G = 255 * HuetoRGB( $var_1, $var_2, $H );
$B = 255 * HuetoRGB( $var_1, $var_2, $H - ( 1 / 3 ) );
}
return array( $R, $G, $B );
}
function distance ( $R1, $G1, $B1, $R2, $G2, $B2 )
{
$result = sqrt ( ( $R1 - $R2 )*( $R1 - $R2 ) + ( $G1 - $G2 )*( $G1 - $G2 ) + ( $B1 - $B2 )*( $B1 - $B2 ) );
return ( $result );
}
?>
shd at earthling dot net ¶
7 years ago
If you happen to need a way to output a Windows BMP file (e.g. when using the PEAR ExcelWriter), feel free to use the following code:
<?php
function imagebmp ($im, $fn = false)
{
if (!$im) return false;
if ($fn === false) $fn = 'php://output';
$f = fopen ($fn, "w");
if (!$f) return false;
//Image dimensions
$biWidth = imagesx ($im);
$biHeight = imagesy ($im);
$biBPLine = $biWidth * 3;
$biStride = ($biBPLine + 3) & ~3;
$biSizeImage = $biStride * $biHeight;
$bfOffBits = 54;
$bfSize = $bfOffBits + $biSizeImage;
//BITMAPFILEHEADER
fwrite ($f, 'BM', 2);
fwrite ($f, pack ('VvvV', $bfSize, 0, 0, $bfOffBits));
//BITMAPINFO (BITMAPINFOHEADER)
fwrite ($f, pack ('VVVvvVVVVVV', 40, $biWidth, $biHeight, 1, 24, 0, $biSizeImage, 0, 0, 0, 0));
$numpad = $biStride - $biBPLine;
for ($y = $biHeight - 1; $y >= 0; --$y)
{
for ($x = 0; $x < $biWidth; ++$x)
{
$col = imagecolorat ($im, $x, $y);
fwrite ($f, pack ('V', $col), 3);
}
for ($i = 0; $i < $numpad; ++$i)
fwrite ($f, pack ('C', 0));
}
fclose ($f);
return true;
}
?>
It works the same way as regular imagejpeg/imagepng do and only supports GD2.0 true colour bitmaps (which is what's required by ExcelWriter).
peter dot hulstaert at gmail dot com ¶
7 years ago
While I was searching for a good way to draw a graph, I stumbled on skumar2k15's script.
I have taken the liberty to improve multiple aspects of it.
1. The array can grow and shrink in size, the graph will adjust accordingly.
2. All the values in the array are recalculated so they won't get bigger than the height of the graph.
3. I inserted the possibility to keep a percentage off the height away from the edge.
4. You can adjust the size of the grid.
5. Everything will adjust when you change the height of width.
<?
header("Content-type: image/png");
// Define variables
$Values=array(50,90,30,155,50,40,320,50,40,86,240,128,650,540,320);
$imgWidth=500;
$imgHeight=200;
$grid=25;
$graphspacing=0.05;
//Creation of new array with hight adjusted values
while (list($key, $val) = each($Values))
{if($val>$max){$max=$val;}}
for ($i=0; $i<count($Values); $i++){
$graphValues[$i] = $Values[$i] * (($imgHeight*(1-$graphspacing))/$max);
}
// Create image and define colors
$image=imagecreate($imgWidth, $imgHeight);
$colorWhite=imagecolorallocate($image, 255, 255, 255);
$colorGrey=imagecolorallocate($image, 192, 192, 192);
$colorBlue=imagecolorallocate($image, 0, 0, 255);
// Create border around image
imageline($image, 0, 0, 0, $imgHeight, $colorGrey);
imageline($image, 0, 0, $imgWidth, 0, $colorGrey);
imageline($image, $imgWidth-1, 0, $imgWidth-1, $imgHeight-1, $colorGrey);
imageline($image, 0, $imgHeight-1, $imgWidth-1, $imgHeight-1, $colorGrey);
// Create grid
for ($i=1; $i<($imgWidth/$grid); $i++)
{imageline($image, $i*$grid, 0, $i*$grid, $imgHeight, $colorGrey);}
for ($i=1; $i<($imgHeight/$grid); $i++)
{imageline($image, 0, $i*$grid, $imgWidth, $i*$grid, $colorGrey);}
// Create line graph
if($imgWidth/$grid>count($graphValues)){$space=$grid;}
else{$space = $imgWidth/(count($graphValues)-1);}
for ($i=0; $i<count($graphValues)-1; $i++)
{imageline($image, $i*$space, ($imgHeight-$graphValues[$i]), ($i+1)*$space, ($imgHeight-$graphValues[$i+1]), $colorBlue);}
// Output graph and clear image from memory
imagepng($image);
imagedestroy($image);
?>
michal-ok at o2 dot pl ¶
7 years ago
The image sharpen function (by Alex R. Austin) provided below seems to be very resource hungry and I couldn't make it work on two different servers - trying to sharpen a 413 x 413 image I ended up with "Fatal error: Allowed memory size of 8388608 bytes exhausted" or "Internal Server Error" or the script terminated without notice. Because I had no priviliges to change the default memory limit on these servers I started looking for other sharpen functions. I have come across a php Unsharp Mask function which works like a charm on both of the servers I dealt with. It can be found at http://vikjavev.no/hovudsida/umtestside.php.
mslemko ¶
7 years ago
For fedora core 4 users that find that the gd library isn't installed, you can issue the command (as root)
# yum install php-gd
it should download and install the gd library. You will need to restart apache... phpinfo() should then tell you "GD Support enabled".
timeshifting at gmail dot com ¶
7 years ago
To sharpen an image, rather than using the code below that produces a sharpening filter with php, use the built-in GD function "imageconvolution" which is designed for this purpose. Matrices can be used for sharpening, blurring, edge detection, etc, ala Photoshop.
A sharpening example:
<?php
$sharpenMatrix = array(-1,-1,-1,-1,16,-1,-1,-1,-1);
$divisor = 8;
$offset = 0;
imageconvolution($myImage, $sharpenMatrix, $divisor, $offset);
?>
Below is some information on building different kinds of matrices. (If you have photoshop (or PSP, GIMP) you can test out your matrices before applying them in PHP)
http://loriweb.pair.com/8udf-basics.html (covers blurs)
http://loriweb.pair.com/8udf-sharpen.html
http://loriweb.pair.com/8udf-edges.html
http://loriweb.pair.com/8udf-emboss.html
jeff at lushmedia dot com ¶
9 years ago
I wrote an online overview of the image functions that people might find useful. In addition to a general overview of the various function categories and code samples, I have included many interactive examples of the functions, allowing viewers to experiment with the parameters, and seeing the results in real time. The presentation is located at New York PHP
http://www.nyphp.org/content/presentations/GDintro/
ingo at jache dot de ¶
1 year ago
I know this might look somewhat superfluous to others, but i once came across a situation where i needed a *strong* blur on an image without having ImageMagick installed. Executing the convolution-filter several times on the same image is awfully slow and still doesn't give a good blur.
The function below accepts a truecolor-image and a blur-factor between 0.0 and 1.0. Beware: It's still quite slow.
<?php
function blurImage($srcimg,$blur)
{
$blur = $blur*$blur;
$blur = max(0,min(1,$blur));
$srcw = imagesx($srcimg);
$srch = imagesy($srcimg);
$dstimg = imagecreatetruecolor($srcw,$srch);
$f1a = $blur;
$f1b = 1.0 - $blur;
$cr = 0; $cg = 0; $cb = 0;
$nr = 0; $ng = 0; $nb = 0;
$rgb = imagecolorat($srcimg,0,0);
$or = ($rgb >> 16) & 0xFF;
$og = ($rgb >> 8) & 0xFF;
$ob = ($rgb) & 0xFF;
//-------------------------------------------------
// first line is a special case
//-------------------------------------------------
$x = $srcw;
$y = $srch-1;
while ($x--)
{
//horizontal blurren
$rgb = imagecolorat($srcimg,$x,$y);
$cr = ($rgb >> 16) & 0xFF;
$cg = ($rgb >> 8) & 0xFF;
$cb = ($rgb) & 0xFF;
$nr = ($cr * $f1a) + ($or * $f1b);
$ng = ($cg * $f1a) + ($og * $f1b);
$nb = ($cb * $f1a) + ($ob * $f1b);
$or = $nr;
$og = $ng;
$ob = $nb;
imagesetpixel($dstimg,$x,$y,($nr << 16) | ($ng << 8) | ($nb));
}
//-------------------------------------------------
//-------------------------------------------------
// now process the entire picture
//-------------------------------------------------
$y = $srch-1;
while ($y--)
{
$rgb = imagecolorat($srcimg,0,$y);
$or = ($rgb >> 16) & 0xFF;
$og = ($rgb >> 8) & 0xFF;
$ob = ($rgb) & 0xFF;
$x = $srcw;
while ($x--)
{
//horizontal
$rgb = imagecolorat($srcimg,$x,$y);
$cr = ($rgb >> 16) & 0xFF;
$cg = ($rgb >> 8) & 0xFF;
$cb = ($rgb) & 0xFF;
$nr = ($cr * $f1a) + ($or * $f1b);
$ng = ($cg * $f1a) + ($og * $f1b);
$nb = ($cb * $f1a) + ($ob * $f1b);
$or = $nr;
$og = $ng;
$ob = $nb;
//vertical
$rgb = imagecolorat($dstimg,$x,$y+1);
$vr = ($rgb >> 16) & 0xFF;
$vg = ($rgb >> 8) & 0xFF;
$vb = ($rgb) & 0xFF;
$nr = ($nr * $f1a) + ($vr * $f1b);
$ng = ($ng * $f1a) + ($vg * $f1b);
$nb = ($nb * $f1a) + ($vb * $f1b);
$vr = $nr;
$vg = $ng;
$vb = $nb;
imagesetpixel($dstimg,$x,$y,($nr << 16) | ($ng << 8) | ($nb));
}
}
//-------------------------------------------------
return $dstimg;
}
$srcimg = imagecreatefromjpeg("test.jpg");
$dstimg = blurImage($srcimg,0.2);
header('Content-type: image/jpeg');
echo( imagejpeg($dstimg) );
exit();
?>
sellout at NoSpAm dot dharmadevil dot com ¶
10 years ago
A fun little function to output UPC-A 11-digit barcodes.
Thanks to barcodeisland.com for the specs.
<?php
function UPCAbarcode($code) {
$lw = 2; $hi = 100;
$Lencode = array('0001101','0011001','0010011','0111101','0100011',
'0110001','0101111','0111011','0110111','0001011');
$Rencode = array('1110010','1100110','1101100','1000010','1011100',
'1001110','1010000','1000100','1001000','1110100');
$ends = '101'; $center = '01010';
/* UPC-A Must be 11 digits, we compute the checksum. */
if ( strlen($code) != 11 ) { die("UPC-A Must be 11 digits."); }
/* Compute the EAN-13 Checksum digit */
$ncode = '0'.$code;
$even = 0; $odd = 0;
for ($x=0;$x<12;$x++) {
if ($x % 2) { $odd += $ncode[$x]; } else { $even += $ncode[$x]; }
}
$code.=(10 - (($odd * 3 + $even) % 10)) % 10;
/* Create the bar encoding using a binary string */
$bars=$ends;
$bars.=$Lencode[$code[0]];
for($x=1;$x<6;$x++) {
$bars.=$Lencode[$code[$x]];
}
$bars.=$center;
for($x=6;$x<12;$x++) {
$bars.=$Rencode[$code[$x]];
}
$bars.=$ends;
/* Generate the Barcode Image */
$img = ImageCreate($lw*95+30,$hi+30);
$fg = ImageColorAllocate($img, 0, 0, 0);
$bg = ImageColorAllocate($img, 255, 255, 255);
ImageFilledRectangle($img, 0, 0, $lw*95+30, $hi+30, $bg);
$shift=10;
for ($x=0;$x<strlen($bars);$x++) {
if (($x<10) || ($x>=45 && $x<50) || ($x >=85)) { $sh=10; } else { $sh=0; }
if ($bars[$x] == '1') { $color = $fg; } else { $color = $bg; }
ImageFilledRectangle($img, ($x*$lw)+15,5,($x+1)*$lw+14,$hi+5+$sh,$color);
}
/* Add the Human Readable Label */
ImageString($img,4,5,$hi-5,$code[0],$fg);
for ($x=0;$x<5;$x++) {
ImageString($img,5,$lw*(13+$x*6)+15,$hi+5,$code[$x+1],$fg);
ImageString($img,5,$lw*(53+$x*6)+15,$hi+5,$code[$x+6],$fg);
}
ImageString($img,4,$lw*95+17,$hi-5,$code[11],$fg);
/* Output the Header and Content. */
header("Content-Type: image/png");
ImagePNG($img);
}
UPCAbarcode('12345678901');
?>
