Что такое код imagesetpixel

imagesetpixel () не изменяет цвет черных пикселей

Я прокручиваю все пиксели изображения (изображение с этой точки гарантируется как png, поэтому сжатие jpeg-изображения не должно учитываться), чтобы я мог изменять значения цвета для каждого пикселя. Это отлично работает таким образом:

Это хорошо работает. Однако скажем, что значение цвета $ r исходного пикселя равно 0, как и изображение, которое я включил в качестве вложения в этот вопрос, последняя эхо-строка будет по-прежнему возвращать 0, как если бы код imagesetpixel() не изменил цвет изображения.

Опять же, это делается внутри цикла:

Таким образом, цикл просто проходит через пиксели, как чтение английского, слева направо до конца, где он переходит к следующей строке. Я не уверен, что это актуально, но это то, где происходит imagesetpixel() .

Опять же, это работает в любой ситуации, если изображение не черное с 0 в качестве значений rgb. Я приложил образец изображения.

Любые идеи, почему это не работает, как описано?

Что такое код imagesetpixel

(PHP 3, PHP 4 , PHP 5)

imagesetpixel — Set a single pixel

Description int imagesetpixel ( resource image, int x, int y, int color )

imagesetpixel() draws a pixel at x , y (top left is 0, 0) in image image of color color .

This code converts a block of text to an image so that each character in the block defines one pixel in the image and each line in the block (delimited by \n’s) builds one whole row of pixels in the image.
Usage: Place a 0 to create a white pixel. Place a 1 to create a black pixel.
Example: Entering the following digits (including the line breaks) will create a 3×3 square with a 1-pixel white border.
00000
01110
01110
01110
00000

if (isset( $_POST [ «sendtxt» ])) <
header ( «Content-type: image/png» );
$splitted = explode ( «\n» , $_POST [ «sendtxt» ]);
foreach ( $splitted as $tcurkey => $curval ) $tsplitted [ $tcurkey ] = rtrim ( $curval );
$splitted = $tsplitted ; //referencing isn’t working for some reason.
$image = imagecreate ( strlen ( $splitted [ 1 ]), count ( $splitted ));
$white = imagecolorallocate ( $image , 0xFF , 0xFF , 0xFF ); // don’t delete this line
$black = imagecolorallocate ( $image , 0x00 , 0x00 , 0x00 );
foreach( $splitted as $curkey => $opelement ) <
$subsplitten = preg_split ( «//» , $opelement );
foreach( $subsplitten as $subcurkey => $subopelement ) <
if ( $subopelement == «1» || $subopelement == «.» ) imagesetpixel ( $image , $subcurkey — 1 , $curkey , $black );
>
>
imagepng ( $image );
imagedestroy ( $image );
> else <
echo

end; >
?>

Just a simple implementation of the Bresenham algorythm (educational purpose. )

You can find more about this and many other tutorials for gfx there: http://brand107.home.comcast.net/pc-gpe/

$deltax = abs ( $x2 — $x1 );
$deltay = abs ( $y2 — $y1 );

if ( $deltax > $deltay ) <
$numpixels = $deltax + 1 ;
$d =( 2 * $deltay )- $deltax ;
$dinc1 = $deltay 1 ; $dinc2 =( $deltay — $deltax ) 1 ;
$xinc1 = 1 ; $xinc2 = 1 ;
$yinc1 = 0 ; $yinc2 = 1 ;
> else <
$numpixels = $deltay + 1 ;
$d =( 2 * $deltax )- $deltay ;
$dinc1 = $deltax 1 ; $dinc2 =( $deltax — $deltay ) 1 ;
$xinc1 = 0 ; $xinc2 = 1 ;
$yinc1 = 1 ; $yinc2 = 1 ;
>

if ( $x1 > $x2 ) <
$xinc1 =- $xinc1 ;
$xinc2 =- $xinc2 ;
>

if ( $y1 > $y2 ) <
$yinc1 =- $yinc1 ;
$yinc2 =- $yinc2 ;
>
$x = $x1 ;
$y = $y1 ;

for ( $i = 0 ; $i $numpixels ; $i ++) <
imagesetpixel ( $im , $x , $y , $color );
if ( $d 0 ) <
$d += $dinc1 ;
$x += $xinc1 ;
$y += $yinc1 ;
> else <
$d += $dinc2 ;
$x += $xinc2 ;
$y += $yinc2 ;
>
>
return ;
>

Here is a function that takes an image ($im) and returns it with the contrast maximised.

function contrast ( $im ) <
$brightness = 0 ;
$maxb = 0 ;
$minb = 255 ;
$imagesize = getimagesize ( $im );
$w = $imagesize [ 0 ];
$h = $imagesize [ 1 ];
for ( $x = 0 ; $x $w ; $x ++) <
for ( $y = 0 ; $y $h ; $y ++) <
$rgb = imagecolorat ( $im , $x , $y );
$rgb = imagecolorsforindex ( $im , $rgb );
$grey = 0.2125 * $rgb [ ‘red’ ]+
0.7154 * $rgb [ ‘green’ ]+
0.0721 * $rgb [ ‘blue’ ];
$brightness += $grey ;
if ( $grey > $maxb ) $maxb = $grey ;
if ( $grey $minb ) $minb = $grey ;
>
>
$brightness = $brightness /( $w * $h );
$minb = $brightness /( $brightness — $minb );
$maxb =( 255 — $brightness )/( $maxb — $brightness );
$contrast = min ( $minb , $maxb );
for ( $x = 0 ; $x $w ; $x ++) <
for ( $y = 0 ; $y $h ; $y ++) <
$rgb = imagecolorat ( $im , $x , $y );
$rgb = imagecolorsforindex ( $im , $rgb );
imagesetpixel ( $im , $x , $y ,
65536 * floor ( min ( $rgb [ ‘red’ ]* $contrast , 255 ))+
256 * floor ( min ( $rgb [ ‘green’ ]* $contrast , 255 ))+
floor ( min ( $rgb [ ‘blue’ ]* $contrast , 255 )));
>
>
return ( $im );
>
?>

An example of usage might be:
= «/path/filename» ;
$image = imagecreatefromjpeg ( $imagefile );
$image = contrast ( $image );
imagejpeg ( $image , $imagefile );
?>

/*
An example combining the use of ImageColorAllocate, Imagesetpixel, Imagecopyresized and some basic Trig

Header ( «Content-type: image/png» );

$height = 128 ;
$width = 128 ;

$imA = ImageCreate ( $width , $height );
$imB = ImageCreate ( $width * 4 , $height * 4 );
$bckA = ImageColorAllocate ( $imA , 0 , 0 , 0 );
$bckB = ImageColorAllocate ( $imB , 0 , 0 , 0 );

//GENERATE GRAY SCALE PALLETE

for( $c = 0 ; $c 256 ; $c ++) <
ImageColorAllocate ( $imA , $c , $c , $c );
>

$m = rand ( 0 , 10 );
for( $c = 0 ; $c 128 ; $c ++) <
$s = ( sin ( deg2rad ( $c * 360 * $m / 128 ) )+ 1 )* 127 ;
$col_arr [ $c ]= $s ;
>
for( $y = 0 ; $y $height ; $y ++) <
for( $x = 0 ; $x $width ; $x ++) <
$imgA [ $x ][ $y ]= $col_arr [ $x ];
>
>
for( $y = 0 ; $y $height ; $y ++) <
for( $x = 0 ; $x $width ; $x ++) <
$imgB [ $x ][ $y ]= $col_arr [ $y ];
>
>

for( $y = 0 ; $y $height ; $y ++) <
for( $x = 0 ; $x $width ; $x ++) <
$imgC [ $x ][ $y ]= $imgA [ $x ][ $y ]+ $imgB [ $x ][ $y ];
$s = $imgC [ $x ][ $y ]/ 2 ;
Imagesetpixel ( $imA , $x , $y , $s );
>
>

//RESIZE IMAGE FOR DISPLAY

Imagecopyresized ( $imB , $imA , 0 , 0 , 0 , 0 , $width * 4 , $height * 4 , $width , $width );
ImagePNG ( $imB );
?>

The example above diden’t work, because of some errors.
This should work and it’s also faster because there is only one 512*512 loop. (but it is still very slow)

= «lena.raw» ;
$width = 512 ;
$height = 512 ;
$fp = fopen ( $filename , «r» );
$contents = fread ( $fp , filesize ( $filename ));
fclose ( $fp );

$image = imagecreate ( $width , $height );

// create greyscale palette because the image is limited to 256 colors
for ( $i = 0 ; $i 256 ; $i ++)

// This is slow, but probably the only way
for ( $i = 0 ; $i 512 ; $i ++) <
for ( $j = 0 ; $j 512 ; $j ++) <
imagesetpixel ( $image , $i , $j , ord ( $contents [ $i + $j * 512 ]));
>
>

Imagesetpixel — изменение значения пикселя — php

Я должен создать скрипт, который читает изображение, и закодировать его, изменяя значение пикселя для каждого канала.

Поэтому я открываю исходный образ JPEG, и я пишу каждый пиксель в другом дескрипторе изображения.

Для кодирования я делаю это:

Здесь функция «крипта»:

Пока здесь все нормально.

Здесь обратная функция:

Когда я декодирую созданное изображение, используя тот же метод, но с функцией «decripta», некоторые пиксели сходят с ума!

Вот несколько примеров:

Может кто-нибудь мне помочь?

У меня есть эта проблема только в том случае, если сохранить изображение в кодировке, а затем открыть ее для декодирования. Если я использую дескриптор без сохранения, часть декодирования правильно! Итак, почему, когда я сохраняю изображение, некоторые пиксели меняют значение? Я сохраняю, используя:

Imagesetpixel

Php функции


Php скрипты


imagesetpixel

(PHP 3, PHP 4, PHP 5)

imagesetpixel — Set a single pixel

Description

bool imagesetpixel ( resource image, int x, int y, int color )

imagesetpixel() draws a pixel at x , y (top left is 0, 0) in image image of color color .

User Contributed Notes

T. Dekker
01-Dec-2005 01:53

In reply to weitheism at gmail.com:

You should probably have used ImageAlphaBlending( $i m age , false); in your early attempts. This way any paint/fill operation replaces the alpha value of the destination.
Brian Vaughn [ php at boynamedbri dot com ]
28-Aug-2005 11:00

I looked, but was unable to find any example code to watermark an image with a watermark that contained alpha transparency. So the following class does just that. As a parameter, it takes 2 image objects: the main image, and the watermark image (which can be a gif, png, whatever) — and optionally, an alpha setting (0-100% alpha for the watermark image). It then creates and returns a new image with the alpha-transparent watermark imposed, center-aligned, over the larger image.

class watermark <

function create_watermark ( $d st_img , $w atermark_img , $alpha = 100 ) <
$alpha /= 100 ; # convert 0-100% user-friendly alpha to decimal

# calculate our images dimensions
$d st_img _w = imagesx ( $d st_img );
$d st_img _h = imagesy ( $d st_img );
$w atermark_img _w = imagesx ( $w atermark_img );
$w atermark_img _h = imagesy ( $w atermark_img );

# create new image to hold merged changes
$r eturn_img = imagecreatetruecolor ( $d st_img _w , $d st_img _h );
# $r eturn_img = imagecreate ( $d st_img _w , $d st_img _h );

# determine center position coordinates
$d st_img _min_x = floor ( ( $d st_img _w / 2 ) — ( $w atermark_img _w / 2 ) );
$d st_img _max_x = ceil ( ( $d st_img _w / 2 ) + ( $w atermark_img _w / 2 ) );
$d st_img _min_y = floor ( ( $d st_img _h / 2 ) — ( $w atermark_img _h / 2 ) );
$d st_img _max_y = ceil ( ( $d st_img _h / 2 ) + ( $w atermark_img _h / 2 ) );

# walk through main image
for ( $y = 0 ; $y $d st_img _h ; $y ++ ) <
for ( $x = 0 ; $x $d st_img _w ; $x ++ ) <
$r eturn_color = NULL ;

# determine the correct pixel location within our watermark
$w atermark_x = $x — $d st_img _min_x ;
$w atermark_y = $y — $d st_img _min_y ;

# fetch color information for both of our images
$d st_rgb = imagecolorsforindex ( $d st_img , imagecolorat ( $d st_img , $x , $y ) );

# using image alpha, and user specified alpha, calculate average
$w atermark_alpha = round ( ( ( 127 — $w atermark_rbg [ ‘alpha’ ] ) / 127 ), 2 );
$w atermark_alpha = $w atermark_alpha * $alpha ;

# calculate the color ‘average’ between the two — taking into account the specified alpha level
$avg_red = $this -> get_ave_color ( $d st_rgb [ ‘red’ ] , $w atermark_rbg [ ‘red’ ] , $w atermark_alpha );
$avg_green = $this -> get_ave_color ( $d st_rgb [ ‘green’ ] , $w atermark_rbg [ ‘green’ ] , $w atermark_alpha );
$avg_blue = $this -> get_ave_color ( $d st_rgb [ ‘blue’ ] , $w atermark_rbg [ ‘blue’ ] , $w atermark_alpha );

# calculate a color index value using the average RGB values we’ve determined
$r eturn_color = $this -> imagegetcolor ( $r eturn_img , $avg_red , $avg_green , $avg_blue );

# if we’re not dealing with an average color here, then let’s just copy over the main color
> else <
$r eturn_color = imagecolorat ( $d st_img , $x , $y );

> # END if watermark

# draw the appropriate color onto the return image
imagesetpixel ( $r eturn_img , $x , $y , $r eturn_color );

> # END for each X pixel
> # END for each Y pixel

# return the resulting, watermarked image for display
return $r eturn_img ;

# average two colors given an alpha
function get_ave_color ( $c ol or _a , $c ol or _b , $alpha ) <
return round ( ( ( $c ol or _a * ( 1 — $alpha ) ) + ( $c ol or _b * $alpha ) ) );
> # END get_ave_color()

# return closest pallette-color match for RGB values
function imagegetcolor ( $i m , $r , $g , $b ) <
$c = imagecolorexact ( $i m , $r , $g , $b );
if ( $c !=- 1 ) return $c ;
$c = imagecolorallocate ( $i m , $r , $g , $b );
if ( $c !=- 1 ) return $c ;
return imagecolorclosest ( $i m , $r , $g , $b );
> # EBD imagegetcolor()

> # END watermark API
?>

weitheism at gmail.com
08-Aug-2005 11:22

I was looking for a way to actually DELETE pixels or squares or parts of an image from an image resource, and at first I thought imagesetpixel would do the trick. Unfortunately, it merely paints over that one pixel, and as far as I knew, php didn’t have any native way of deleting sections out of your image — so this little method should take care of deleting rectangular parts of your pictures!

function deleteRectangle(& $oldImage , $leftX , $leftY , $r ightX , $r ightY )
<
// Since php has no native way of delete parts of images
// We have to div >copy them manually to a new
// image

$x Size = imagesx ( $oldImage );
$y Size = imagesy ( $oldImage );

// Div >copy
$i m age section = array ();
$i m age section [ ] = array (0,0, $leftX , $y Size );
$i m age section [ ] = array ( $leftX ,0, $r ightX +1, $leftY );
$i m age section [ ] = array ( $leftX , $r ightY +1, $r ightX +1, $y Size );
$i m age section [ ] = array ( $r ightX +1,0, $x Size , $y Size );

// Create the new , copied image
$newImage = imagecreatetruecolor( $x Size , $y Size );
// Vital for transparency
imagesavealpha( $newImage ,true);

// Fills the background a transparent color
$transparentBackground = imagecolorallocatealpha( $newImage ,255,255,255,127);
imagefill ( $newImage ,0,0, $transparentBackground );

// Copies each of the four imagesections into their respective old positions
for ( $i = 0; $i $i m age section ); $i ++)
imagecopyresampled( $newImage , $oldImage , $i m age section [ $i ] [ 0 ] , $i m age section [ $i ] [ 1 ] , $i m age section [ $i ] [ 0 ] , $i m age section [ $i ] [ 1 ] , $i m age section [ $i ] [ 2 ] — $i m age section [ $i ] [ 0 ] , $i m age section [ $i ] [ 3 ] — $i m age section [ $i ] [ 1 ] , $i m age section [ $i ] [ 2 ] — $i m age section [ $i ] [ 0 ] , $i m age section [ $i ] [ 3 ] — $i m age section [ $i ] [ 1 ] );

// Alternately you can cycle through each pixel in an image and see if that pixel is an the area
// but that could be more intensive
imagedestroy ( $oldImage );

// Sets the old image equal to the new , cleared image
$oldImage = $newImage ;
>

It was made with a transparent background in mind, but you could easily change that by changeing imagecreatetruecolor to imagecreate and deleting the code that deals with transparency. Hope it helps!
d [ AT ] spr >[ DOT ] de
14-Jul-2005 01:28

This code does generate a RGB-cube (with or without borders). Because its only rendering the visible pixels its clearly fast (approx 1 up to 2 seconds). With changing the $order -variable you can see the cube from different perspectives. Entering double or tribble values (like rrg or ggg) will give you other specs of single channels. Send any sugestions to my email.

$b orders = true;
$order = ‘rgb’ ;

set_time_limit ( 0 );
$i m g = imageCreateTrueColor ( 510 , 510 );

$b g = imageColorAllocate ( $i m g , 255 , 255 , 255 );
$b lack = imageColorAllocate ( $i m g , 255 , 255 , 255 );

$c ol = imageColorAllocate ( $i m g , $r N , $g N , $b N );
imagesetpixel ( $i m g , $b +( $r * 0.5 )+( 255 / 4 ), $g +( $r * 0.5 )+( 255 / 4 ), $c ol );
if ( $r $g > 0 ) break;
>
>

if ( $b orders ) <
imagesetpixel ( $i m g , ( $r * 0.5 +( 255 / 4 )), ( $r * 0.5 )+( 255 / 4 ), $b lack );
imagesetpixel ( $i m g , ( $r * 0.5 )+ 255 +( 255 / 4 ), ( $r * 0.5 )+( 255 / 4 ), $b lack );
imagesetpixel ( $i m g , ( $r * 0.5 )+( 255 / 4 ), ( $r * 0.5 )+ 255 +( 255 / 4 ), $b lack );
>
>

if ( $b orders ) <
imageline ( $i m g , 255 / 4 , 255 / 4 , 255 +( 255 / 4 ), 255 / 4 , $b lack );
imageline ( $i m g , 255 / 4 , 255 / 4 , 255 / 4 , 255 +( 255 / 4 ), $b lack );
imageline ( $i m g , 255 * 0.5 +( 255 / 4 ), 255 * 0.5 +( 255 / 4 ), 255 * 0.5 +( 255 / 4 ), 255 * 0.5 + 509 * 0.5 +( 255 / 4 ), $b lack );
imageline ( $i m g , 255 * 0.5 +( 255 / 4 ), 255 * 0.5 +( 255 / 4 ), 255 * 0.5 + 509 * 0.5 +( 255 / 4 ), 255 * 0.5 +( 255 / 4 ), $b lack );
imageline ( $i m g , 255 * 0.5 +( 255 / 4 ), 255 * 0.5 + 509 * 0.5 +( 255 / 4 ), 255 * 0.5 + 509 * 0.5 +( 255 / 4 ), 255 * 0.5 + 509 * 0.5 +( 255 / 4 ), $b lack );
imageline ( $i m g , 255 * 0.5 + 509 * 0.5 +( 255 / 4 ), 255 * 0.5 +( 255 / 4 ), 255 * 0.5 + 509 * 0.5 +( 255 / 4 ), 255 * 0.5 + 509 * 0.5 +( 255 / 4 ), $b lack );
>

header ( «Content-Type: image/png» );
imagepng ( $i m g );
imagedestroy ( $i m g );
?>

bpgordon at gmail dot com
24-May-2005 02:18

This code converts a block of text to an image so that each character in the block defines one pixel in the image and each line in the block (delimited by \n’s) builds one whole row of pixels in the image.
Usage: Place a 0 to create a white pixel. Place a 1 to create a black pixel.
Example: Entering the following digits (including the line breaks) will create a 3×3 square with a 1-pixel white border.
00000
01110
01110
01110
00000

if ( isset ( $_POST [ «sendtxt» ] )) <
header ( «Content-type: image/png» );
$s plitted = explode ( «\n» , $_POST [ «sendtxt» ] );
foreach ( $s plitted as $tcurkey => $c urval ) $tsplitted [ $tcurkey ] = rtrim ( $c urval );
$s plitted = $tsplitted ; //referencing isn’t working for some reason.
$i m age = imagecreate ( strlen ( $s plitted [ 1 ] ), count ( $s plitted ));
$w hite = imagecolorallocate ( $i m age , 0xFF , 0xFF , 0xFF ); // don’t delete this line
$b lack = imagecolorallocate ( $i m age , 0x00 , 0x00 , 0x00 );
foreach ( $s plitted as $c urkey => $opelement ) <
$s ubsplitten = preg_split ( «//» , $opelement );
foreach ( $s ubsplitten as $s ubcurkey => $s ubopelement ) <
if ( $s ubopelement == «1» || $s ubopelement == «.» ) imagesetpixel ( $i m age , $s ubcurkey — 1 , $c urkey , $b lack );
>
>
imagepng ( $i m age );
imagedestroy ( $i m age );
> else <
echo >
?>

odin dtdm.org
05-Oct-2004 04:36

Just a simple implementation of the Bresenham algorythm (educational purpose. )

You can find more about this and many other tutorials for gfx there:

$d eltax = abs ( $x 2 — $x 1 );
$d eltay = abs ( $y 2 — $y 1 );

if ( $d eltax > $d eltay ) <
$numpixels = $d eltax + 1 ;
$d =( 2 * $d eltay )- $d eltax ;
$d inc1 = $d eltay $d inc2 =( $d eltay — $d eltax ) $x inc1 = 1 ; $x inc2 = 1 ;
$y inc1 = 0 ; $y inc2 = 1 ;
> else <
$numpixels = $d eltay + 1 ;
$d =( 2 * $d eltax )- $d eltay ;
$d inc1 = $d eltax $d inc2 =( $d eltax — $d eltay ) $x inc1 = 0 ; $x inc2 = 1 ;
$y inc1 = 1 ; $y inc2 = 1 ;
>

if ( $x 1 > $x 2 ) <
$x inc1 =- $x inc1 ;
$x inc2 =- $x inc2 ;
>

if ( $y 1 > $y 2 ) <
$y inc1 =- $y inc1 ;
$y inc2 =- $y inc2 ;
>
$x = $x 1 ;
$y = $y 1 ;

for ( $i = 0 ; $i $numpixels ; $i ++) <
imagesetpixel ( $i m , $x , $y , $c ol or );
if ( $d <
$d += $d inc1 ;
$x += $x inc1 ;
$y += $y inc1 ;
> else <
$d += $d inc2 ;
$x += $x inc2 ;
$y += $y inc2 ;
>
>
return ;
>

?>

richard at mf2fm dot co dot uk
24-Aug-2004 01:06

Here is a function that takes an image ( $i m ) and returns it with the contrast maximised.

function contrast ( $i m ) <
$b rightness = 0 ;
$m axb = 0 ;
$m inb = 255 ;
$i m age size = getimagesize ( $i m );
$w = $i m age size [ 0 ] ;
$h = $i m age size [ 1 ] ;
for ( $x = 0 ; $x $w ; $x ++) <
for ( $y = 0 ; $y $h ; $y ++) <
$r gb = imagecolorat ( $i m , $x , $y );
$r gb = imagecolorsforindex ( $i m , $r gb );
$g rey = 0.2125 * $r gb [ ‘red’ ] +
0.7154 * $r gb [ ‘green’ ] +
0.0721 * $r gb [ ‘blue’ ] ;
$b rightness += $g rey ;
if ( $g rey > $m axb ) $m axb = $g rey ;
if ( $g rey $m inb ) $m inb = $g rey ;
>
>
$b rightness = $b rightness /( $w * $h );
$m inb = $b rightness /( $b rightness — $m inb );
$m axb =( 255 — $b rightness )/( $m axb — $b rightness );
$c ontrast = min ( $m inb , $m axb );
for ( $x = 0 ; $x $w ; $x ++) <
for ( $y = 0 ; $y $h ; $y ++) <
$r gb = imagecolorat ( $i m , $x , $y );
$r gb = imagecolorsforindex ( $i m , $r gb );
imagesetpixel ( $i m , $x , $y ,
65536 * floor ( min ( $r gb [ ‘red’ ] * $c ontrast , 255 ))+
256 * floor ( min ( $r gb [ ‘green’ ] * $c ontrast , 255 ))+
floor ( min ( $r gb [ ‘blue’ ] * $c ontrast , 255 )));
>
>
return ( $i m );
>
?>

An example of usage might be:

$i m age file = «/path/filename» ;
$i m age = imagecreatefromjpeg ( $i m age file );
$i m age = contrast ( $i m age );
imagejpeg ( $i m age , $i m age file );
?>

chris at drunkenpirates dot co dot uk
14-Sep-2003 04:50

/*
An example combining the use of ImageColorAllocate, Imagesetpixel, Imagecopyresized and some basic Trig

Header ( «Content-type: image/png» );

$h eight = 128 ;
$w idth = 128 ;

$i m A = ImageCreate ( $w idth , $h eight );
$i m B = ImageCreate ( $w idth * 4 , $h eight * 4 );
$b ckA = ImageColorAllocate ( $i m A , 0 , 0 , 0 );
$b ckB = ImageColorAllocate ( $i m B , 0 , 0 , 0 );

//GENERATE GRAY SCALE PALLETE

for ( $c = 0 ; $c $c ++) <
ImageColorAllocate ( $i m A , $c , $c , $c );
>

$m = rand ( 0 , 10 );
for ( $c = 0 ; $c $c ++) <
$s = ( sin ( deg2rad ( $c * 360 * $m / 128 ) )+ 1 )* 127 ;
$c ol _arr [ $c ] = $s ;
>
for ( $y = 0 ; $y $h eight ; $y ++) <
for ( $x = 0 ; $x $w idth ; $x ++) <
$i m g A [ $x ] [ $y ] = $c ol _arr [ $x ] ;
>
>
for ( $y = 0 ; $y $h eight ; $y ++) <
for ( $x = 0 ; $x $w idth ; $x ++) <
$i m g B [ $x ] [ $y ] = $c ol _arr [ $y ] ;
>
>

for ( $y = 0 ; $y $h eight ; $y ++) <
for ( $x = 0 ; $x $w idth ; $x ++) <
$i m g C [ $x ] [ $y ] = $i m g A [ $x ] [ $y ] + $i m g B [ $x ] [ $y ] ;
$s = $i m g C [ $x ] [ $y ] / 2 ;
Imagesetpixel ( $i m A , $x , $y , $s );
>
>

//RESIZE IMAGE FOR DISPLAY

Imagecopyresized ( $i m B , $i m A , 0 , 0 , 0 , 0 , $w idth * 4 , $h eight * 4 , $w idth , $w idth );
ImagePNG ( $i m B );
?>

dino at nordmark dot dk
31-May-2002 03:28

The example above diden’t work, because of some errors.
This should work and it’s also faster because there is only one 512*512 loop. (but it is still very slow)

$filename = «lena.raw» ;
$w idth = 512 ;
$h eight = 512 ;
$fp = fopen ( $filename , «r» );
$c ontents = fread ( $fp , filesize ( $filename ));
fclose ( $fp );

$i m age = imagecreate ( $w idth , $h eight );

// create greyscale palette because the image is limited to 256 colors
for ( $i = 0 ; $i $i ++)

// This is slow, but probably the only way
for ( $i = 0 ; $i $i ++) <
for ( $j = 0 ; $j $j ++) <
imagesetpixel ( $i m age , $i , $j , ord ( $c ontents [ $i + $j * 512 ] ));
>
>

PHP Г.Д. imagesetpixel, пиксели не 1 до 1 отношения с пикселями и внутренней модели изображения

Попробуйте, вы увидите, что там должна быть сплошная линия 800 пикселей в ширину. Существует не так, по крайней мере, с моей стороны. Аддон для FireFox WebDeveloper (инструмент линейки под misc-> отображения линейки) показывает верхнюю линию на приблизительно 83 пикселей в ширину.

В зависимости от вашего HTML-коды для вставки изображения, ваш браузер может изменить размер изображения, чтобы соответствовать элементам страницы.

PHP imagesetpixel () прекратить ограничение нарисованных пикселей до

Я использую imagesetpixel (), чтобы нарисовать серый пиксель для буквы «x» и черный пиксель для буквы «o». Работает нормально, если вы вводите только

250 или меньше X и O, но если вы вводите больше, по какой-то странной причине, только первые

250 X и O рисуются, а остальные нет. Кто-нибудь знает, как я могу это исправить?

Как заметка, в будущем я могу захотеть иметь возможность заменить дополнительные буквы на свои собственные цвета, которые я выберу, поэтому имейте это в виду (например, a = красный, b = синий, c = зеленый, d = оранжевый и т. д.).

1 ответ

Функция imagecolorallocate добавляет цвет в таблицу цветов изображения при каждом его вызове — эта таблица цветов имеет ограничение в 255 цветов.

То, что вы хотите сделать, это создать ссылки на цвета, прежде чем перебрать все буквы, эффективно создавая только одну ссылку на цвет на букву.

Так что выделите ссылки на ваши разные цвета сразу после создания вашего изображения, а затем вызовите эти ссылки напрямую вместо выделения нового цвета:

Imagesetpixel — изменение значения пикселя

я должен создать сценарий, который читать изображения и кодировать его изменение значения пикселей для каждого канала .

Так я открываю исходный JPEG изображение, и я пишу каждый пиксель другой манипулятор изображения.

Для кодирования я это сделать:

Здесь функция «Cripta»:

Пока здесь все нормально .

Здесь обратная функция:

Когда я разбираюсь созданное изображение с использованием того же метода, но с функцией «decripta», некоторые пиксели сходят с ума!

Вот некоторые примеры:

Может кто-нибудь мне помочь?

У меня есть эта проблема только в том случае, если сохранить изображение в кодировке, а затем открыть его для декодирования . Если я использую дескриптор без сохранения, часть декодирования правильно! Итак, почему, когда я сохраняю изображение, некоторые пиксели меняют значение? Я сэкономлю, используя:

Создан 12 окт. 14 2014-10-12 15:42:28 Stefano Venneri

Вы собираетесь работать с источником файла, с чем-нибудь. Нет 100% гарантии, что источник файлов будет таким же, как и раньше, это может быть по многим причинам. Одна вещь для проверки, это кодирование – Daryl Gill 12 окт. 14 2014-10-12 15:50:12

1 ответ

Как уже упоминалось Павлом, алгоритм jpg всегда будет изменять некоторые пиксели, даже с атрибутом качества 100%.

Чтобы получить 100% -ную точность пикселей, вы должны работать с lossless image format, например PNG или TIFF. Работа с GD or Imagick должна быть возможна в формате без потерь.

Под редакцией с l’L’л комментарий: PNG должен быть пригоден и поддерживается библиотекой GD

Создан 12 окт. 14 2014-10-12 16:01:29 Yoric

Формат ‘PNG’ без потерь, поэтому использование’ imagepng’ является возможностью. – l’ L’ l 12 окт. 14 2014-10-12 16:04:06

Правильно, спасибо, что указали это. Я редактировал мой пост – Yoric 12 окт. 14 2014-10-12 16:11:23

Imagesetpixel — изменение значения пикселя

я должен создать сценарий, который читать изображения и кодировать его изменение значения пикселей для каждого канала .

Так я открываю исходный JPEG изображение, и я пишу каждый пиксель другой манипулятор изображения.

Для кодирования я это сделать:

Здесь функция «Cripta»:

Пока здесь все нормально .

Здесь обратная функция:

Когда я разбираюсь созданное изображение с использованием того же метода, но с функцией «decripta», некоторые пиксели сходят с ума!

Вот некоторые примеры:

Может кто-нибудь мне помочь?

У меня есть эта проблема только в том случае, если сохранить изображение в кодировке, а затем открыть его для декодирования . Если я использую дескриптор без сохранения, часть декодирования правильно! Итак, почему, когда я сохраняю изображение, некоторые пиксели меняют значение? Я сэкономлю, используя:

Создан 12 окт. 14 2014-10-12 15:42:28 Stefano Venneri

Вы собираетесь работать с источником файла, с чем-нибудь. Нет 100% гарантии, что источник файлов будет таким же, как и раньше, это может быть по многим причинам. Одна вещь для проверки, это кодирование – Daryl Gill 12 окт. 14 2014-10-12 15:50:12

1 ответ

Как уже упоминалось Павлом, алгоритм jpg всегда будет изменять некоторые пиксели, даже с атрибутом качества 100%.

Чтобы получить 100% -ную точность пикселей, вы должны работать с lossless image format, например PNG или TIFF. Работа с GD or Imagick должна быть возможна в формате без потерь.

Под редакцией с l’L’л комментарий: PNG должен быть пригоден и поддерживается библиотекой GD

Создан 12 окт. 14 2014-10-12 16:01:29 Yoric

Формат ‘PNG’ без потерь, поэтому использование’ imagepng’ является возможностью. – l’ L’ l 12 окт. 14 2014-10-12 16:04:06

Правильно, спасибо, что указали это. Я редактировал мой пост – Yoric 12 окт. 14 2014-10-12 16:11:23

imagesetpixel

imagesetpixel — Set a single pixel

Description

imagesetpixel() draws a pixel at the specified coordinate.

Parameters

An image resource, returned by one of the image creation functions, such as imagecreatetruecolor().

A color identifier created with imagecolorallocate().

Return Values

Returns TRUE on success or FALSE on failure.

Examples

Example #1 imagesetpixel() example

A random drawing that ends with a regular picture.

$gd = imagecreatetruecolor ( $x , $y );

$corners [ 0 ] = array( ‘x’ => 100 , ‘y’ => 10 );
$corners [ 1 ] = array( ‘x’ => 0 , ‘y’ => 190 );
$corners [ 2 ] = array( ‘x’ => 200 , ‘y’ => 190 );

$red = imagecolorallocate ( $gd , 255 , 0 , 0 );

for ( $i = 0 ; $i 100000 ; $i ++) <
imagesetpixel ( $gd , round ( $x ), round ( $y ), $red );
$a = rand ( 0 , 2 );
$x = ( $x + $corners [ $a ][ ‘x’ ]) / 2 ;
$y = ( $y + $corners [ $a ][ ‘y’ ]) / 2 ;
>

header ( ‘Content-Type: image/png’ );
imagepng ( $gd );

The above example will output something similar to:

Imagesetpixel

Php функции


Php скрипты


imagesetpixel

(PHP 3, PHP 4, PHP 5)

imagesetpixel — Set a single pixel

Description

bool imagesetpixel ( resource image, int x, int y, int color )

imagesetpixel() draws a pixel at x , y (top left is 0, 0) in image image of color color .

User Contributed Notes

T. Dekker
01-Dec-2005 01:53

In reply to weitheism at gmail.com:

You should probably have used ImageAlphaBlending( $i m age , false); in your early attempts. This way any paint/fill operation replaces the alpha value of the destination.
Brian Vaughn [ php at boynamedbri dot com ]
28-Aug-2005 11:00

I looked, but was unable to find any example code to watermark an image with a watermark that contained alpha transparency. So the following class does just that. As a parameter, it takes 2 image objects: the main image, and the watermark image (which can be a gif, png, whatever) — and optionally, an alpha setting (0-100% alpha for the watermark image). It then creates and returns a new image with the alpha-transparent watermark imposed, center-aligned, over the larger image.

class watermark <

function create_watermark ( $d st_img , $w atermark_img , $alpha = 100 ) <
$alpha /= 100 ; # convert 0-100% user-friendly alpha to decimal

# calculate our images dimensions
$d st_img _w = imagesx ( $d st_img );
$d st_img _h = imagesy ( $d st_img );
$w atermark_img _w = imagesx ( $w atermark_img );
$w atermark_img _h = imagesy ( $w atermark_img );

# create new image to hold merged changes
$r eturn_img = imagecreatetruecolor ( $d st_img _w , $d st_img _h );
# $r eturn_img = imagecreate ( $d st_img _w , $d st_img _h );

# determine center position coordinates
$d st_img _min_x = floor ( ( $d st_img _w / 2 ) — ( $w atermark_img _w / 2 ) );
$d st_img _max_x = ceil ( ( $d st_img _w / 2 ) + ( $w atermark_img _w / 2 ) );
$d st_img _min_y = floor ( ( $d st_img _h / 2 ) — ( $w atermark_img _h / 2 ) );
$d st_img _max_y = ceil ( ( $d st_img _h / 2 ) + ( $w atermark_img _h / 2 ) );

# walk through main image
for ( $y = 0 ; $y $d st_img _h ; $y ++ ) <
for ( $x = 0 ; $x $d st_img _w ; $x ++ ) <
$r eturn_color = NULL ;

# determine the correct pixel location within our watermark
$w atermark_x = $x — $d st_img _min_x ;
$w atermark_y = $y — $d st_img _min_y ;

# fetch color information for both of our images
$d st_rgb = imagecolorsforindex ( $d st_img , imagecolorat ( $d st_img , $x , $y ) );

# using image alpha, and user specified alpha, calculate average
$w atermark_alpha = round ( ( ( 127 — $w atermark_rbg [ ‘alpha’ ] ) / 127 ), 2 );
$w atermark_alpha = $w atermark_alpha * $alpha ;

# calculate the color ‘average’ between the two — taking into account the specified alpha level
$avg_red = $this -> get_ave_color ( $d st_rgb [ ‘red’ ] , $w atermark_rbg [ ‘red’ ] , $w atermark_alpha );
$avg_green = $this -> get_ave_color ( $d st_rgb [ ‘green’ ] , $w atermark_rbg [ ‘green’ ] , $w atermark_alpha );
$avg_blue = $this -> get_ave_color ( $d st_rgb [ ‘blue’ ] , $w atermark_rbg [ ‘blue’ ] , $w atermark_alpha );

# calculate a color index value using the average RGB values we’ve determined
$r eturn_color = $this -> imagegetcolor ( $r eturn_img , $avg_red , $avg_green , $avg_blue );

# if we’re not dealing with an average color here, then let’s just copy over the main color
> else <
$r eturn_color = imagecolorat ( $d st_img , $x , $y );

> # END if watermark

# draw the appropriate color onto the return image
imagesetpixel ( $r eturn_img , $x , $y , $r eturn_color );

> # END for each X pixel
> # END for each Y pixel

# return the resulting, watermarked image for display
return $r eturn_img ;

# average two colors given an alpha
function get_ave_color ( $c ol or _a , $c ol or _b , $alpha ) <
return round ( ( ( $c ol or _a * ( 1 — $alpha ) ) + ( $c ol or _b * $alpha ) ) );
> # END get_ave_color()

# return closest pallette-color match for RGB values
function imagegetcolor ( $i m , $r , $g , $b ) <
$c = imagecolorexact ( $i m , $r , $g , $b );
if ( $c !=- 1 ) return $c ;
$c = imagecolorallocate ( $i m , $r , $g , $b );
if ( $c !=- 1 ) return $c ;
return imagecolorclosest ( $i m , $r , $g , $b );
> # EBD imagegetcolor()

> # END watermark API
?>

weitheism at gmail.com
08-Aug-2005 11:22

I was looking for a way to actually DELETE pixels or squares or parts of an image from an image resource, and at first I thought imagesetpixel would do the trick. Unfortunately, it merely paints over that one pixel, and as far as I knew, php didn’t have any native way of deleting sections out of your image — so this little method should take care of deleting rectangular parts of your pictures!

function deleteRectangle(& $oldImage , $leftX , $leftY , $r ightX , $r ightY )
<
// Since php has no native way of delete parts of images
// We have to div >copy them manually to a new
// image

$x Size = imagesx ( $oldImage );
$y Size = imagesy ( $oldImage );

// Div >copy
$i m age section = array ();
$i m age section [ ] = array (0,0, $leftX , $y Size );
$i m age section [ ] = array ( $leftX ,0, $r ightX +1, $leftY );
$i m age section [ ] = array ( $leftX , $r ightY +1, $r ightX +1, $y Size );
$i m age section [ ] = array ( $r ightX +1,0, $x Size , $y Size );

// Create the new , copied image
$newImage = imagecreatetruecolor( $x Size , $y Size );
// Vital for transparency
imagesavealpha( $newImage ,true);

// Fills the background a transparent color
$transparentBackground = imagecolorallocatealpha( $newImage ,255,255,255,127);
imagefill ( $newImage ,0,0, $transparentBackground );

// Copies each of the four imagesections into their respective old positions
for ( $i = 0; $i $i m age section ); $i ++)
imagecopyresampled( $newImage , $oldImage , $i m age section [ $i ] [ 0 ] , $i m age section [ $i ] [ 1 ] , $i m age section [ $i ] [ 0 ] , $i m age section [ $i ] [ 1 ] , $i m age section [ $i ] [ 2 ] — $i m age section [ $i ] [ 0 ] , $i m age section [ $i ] [ 3 ] — $i m age section [ $i ] [ 1 ] , $i m age section [ $i ] [ 2 ] — $i m age section [ $i ] [ 0 ] , $i m age section [ $i ] [ 3 ] — $i m age section [ $i ] [ 1 ] );

// Alternately you can cycle through each pixel in an image and see if that pixel is an the area
// but that could be more intensive
imagedestroy ( $oldImage );

// Sets the old image equal to the new , cleared image
$oldImage = $newImage ;
>

It was made with a transparent background in mind, but you could easily change that by changeing imagecreatetruecolor to imagecreate and deleting the code that deals with transparency. Hope it helps!
d [ AT ] spr >[ DOT ] de
14-Jul-2005 01:28

This code does generate a RGB-cube (with or without borders). Because its only rendering the visible pixels its clearly fast (approx 1 up to 2 seconds). With changing the $order -variable you can see the cube from different perspectives. Entering double or tribble values (like rrg or ggg) will give you other specs of single channels. Send any sugestions to my email.

$b orders = true;
$order = ‘rgb’ ;

set_time_limit ( 0 );
$i m g = imageCreateTrueColor ( 510 , 510 );

$b g = imageColorAllocate ( $i m g , 255 , 255 , 255 );
$b lack = imageColorAllocate ( $i m g , 255 , 255 , 255 );

$c ol = imageColorAllocate ( $i m g , $r N , $g N , $b N );
imagesetpixel ( $i m g , $b +( $r * 0.5 )+( 255 / 4 ), $g +( $r * 0.5 )+( 255 / 4 ), $c ol );
if ( $r $g > 0 ) break;
>
>

if ( $b orders ) <
imagesetpixel ( $i m g , ( $r * 0.5 +( 255 / 4 )), ( $r * 0.5 )+( 255 / 4 ), $b lack );
imagesetpixel ( $i m g , ( $r * 0.5 )+ 255 +( 255 / 4 ), ( $r * 0.5 )+( 255 / 4 ), $b lack );
imagesetpixel ( $i m g , ( $r * 0.5 )+( 255 / 4 ), ( $r * 0.5 )+ 255 +( 255 / 4 ), $b lack );
>
>

if ( $b orders ) <
imageline ( $i m g , 255 / 4 , 255 / 4 , 255 +( 255 / 4 ), 255 / 4 , $b lack );
imageline ( $i m g , 255 / 4 , 255 / 4 , 255 / 4 , 255 +( 255 / 4 ), $b lack );
imageline ( $i m g , 255 * 0.5 +( 255 / 4 ), 255 * 0.5 +( 255 / 4 ), 255 * 0.5 +( 255 / 4 ), 255 * 0.5 + 509 * 0.5 +( 255 / 4 ), $b lack );
imageline ( $i m g , 255 * 0.5 +( 255 / 4 ), 255 * 0.5 +( 255 / 4 ), 255 * 0.5 + 509 * 0.5 +( 255 / 4 ), 255 * 0.5 +( 255 / 4 ), $b lack );
imageline ( $i m g , 255 * 0.5 +( 255 / 4 ), 255 * 0.5 + 509 * 0.5 +( 255 / 4 ), 255 * 0.5 + 509 * 0.5 +( 255 / 4 ), 255 * 0.5 + 509 * 0.5 +( 255 / 4 ), $b lack );
imageline ( $i m g , 255 * 0.5 + 509 * 0.5 +( 255 / 4 ), 255 * 0.5 +( 255 / 4 ), 255 * 0.5 + 509 * 0.5 +( 255 / 4 ), 255 * 0.5 + 509 * 0.5 +( 255 / 4 ), $b lack );
>

header ( «Content-Type: image/png» );
imagepng ( $i m g );
imagedestroy ( $i m g );
?>

bpgordon at gmail dot com
24-May-2005 02:18

This code converts a block of text to an image so that each character in the block defines one pixel in the image and each line in the block (delimited by \n’s) builds one whole row of pixels in the image.
Usage: Place a 0 to create a white pixel. Place a 1 to create a black pixel.
Example: Entering the following digits (including the line breaks) will create a 3×3 square with a 1-pixel white border.
00000
01110
01110
01110
00000

if ( isset ( $_POST [ «sendtxt» ] )) <
header ( «Content-type: image/png» );
$s plitted = explode ( «\n» , $_POST [ «sendtxt» ] );
foreach ( $s plitted as $tcurkey => $c urval ) $tsplitted [ $tcurkey ] = rtrim ( $c urval );
$s plitted = $tsplitted ; //referencing isn’t working for some reason.
$i m age = imagecreate ( strlen ( $s plitted [ 1 ] ), count ( $s plitted ));
$w hite = imagecolorallocate ( $i m age , 0xFF , 0xFF , 0xFF ); // don’t delete this line
$b lack = imagecolorallocate ( $i m age , 0x00 , 0x00 , 0x00 );
foreach ( $s plitted as $c urkey => $opelement ) <
$s ubsplitten = preg_split ( «//» , $opelement );
foreach ( $s ubsplitten as $s ubcurkey => $s ubopelement ) <
if ( $s ubopelement == «1» || $s ubopelement == «.» ) imagesetpixel ( $i m age , $s ubcurkey — 1 , $c urkey , $b lack );
>
>
imagepng ( $i m age );
imagedestroy ( $i m age );
> else <
echo >
?>

odin dtdm.org
05-Oct-2004 04:36

Just a simple implementation of the Bresenham algorythm (educational purpose. )

You can find more about this and many other tutorials for gfx there:

$d eltax = abs ( $x 2 — $x 1 );
$d eltay = abs ( $y 2 — $y 1 );

if ( $d eltax > $d eltay ) <
$numpixels = $d eltax + 1 ;
$d =( 2 * $d eltay )- $d eltax ;
$d inc1 = $d eltay $d inc2 =( $d eltay — $d eltax ) $x inc1 = 1 ; $x inc2 = 1 ;
$y inc1 = 0 ; $y inc2 = 1 ;
> else <
$numpixels = $d eltay + 1 ;
$d =( 2 * $d eltax )- $d eltay ;
$d inc1 = $d eltax $d inc2 =( $d eltax — $d eltay ) $x inc1 = 0 ; $x inc2 = 1 ;
$y inc1 = 1 ; $y inc2 = 1 ;
>

if ( $x 1 > $x 2 ) <
$x inc1 =- $x inc1 ;
$x inc2 =- $x inc2 ;
>

if ( $y 1 > $y 2 ) <
$y inc1 =- $y inc1 ;
$y inc2 =- $y inc2 ;
>
$x = $x 1 ;
$y = $y 1 ;

for ( $i = 0 ; $i $numpixels ; $i ++) <
imagesetpixel ( $i m , $x , $y , $c ol or );
if ( $d <
$d += $d inc1 ;
$x += $x inc1 ;
$y += $y inc1 ;
> else <
$d += $d inc2 ;
$x += $x inc2 ;
$y += $y inc2 ;
>
>
return ;
>

?>

richard at mf2fm dot co dot uk
24-Aug-2004 01:06

Here is a function that takes an image ( $i m ) and returns it with the contrast maximised.

function contrast ( $i m ) <
$b rightness = 0 ;
$m axb = 0 ;
$m inb = 255 ;
$i m age size = getimagesize ( $i m );
$w = $i m age size [ 0 ] ;
$h = $i m age size [ 1 ] ;
for ( $x = 0 ; $x $w ; $x ++) <
for ( $y = 0 ; $y $h ; $y ++) <
$r gb = imagecolorat ( $i m , $x , $y );
$r gb = imagecolorsforindex ( $i m , $r gb );
$g rey = 0.2125 * $r gb [ ‘red’ ] +
0.7154 * $r gb [ ‘green’ ] +
0.0721 * $r gb [ ‘blue’ ] ;
$b rightness += $g rey ;
if ( $g rey > $m axb ) $m axb = $g rey ;
if ( $g rey $m inb ) $m inb = $g rey ;
>
>
$b rightness = $b rightness /( $w * $h );
$m inb = $b rightness /( $b rightness — $m inb );
$m axb =( 255 — $b rightness )/( $m axb — $b rightness );
$c ontrast = min ( $m inb , $m axb );
for ( $x = 0 ; $x $w ; $x ++) <
for ( $y = 0 ; $y $h ; $y ++) <
$r gb = imagecolorat ( $i m , $x , $y );
$r gb = imagecolorsforindex ( $i m , $r gb );
imagesetpixel ( $i m , $x , $y ,
65536 * floor ( min ( $r gb [ ‘red’ ] * $c ontrast , 255 ))+
256 * floor ( min ( $r gb [ ‘green’ ] * $c ontrast , 255 ))+
floor ( min ( $r gb [ ‘blue’ ] * $c ontrast , 255 )));
>
>
return ( $i m );
>
?>

An example of usage might be:

$i m age file = «/path/filename» ;
$i m age = imagecreatefromjpeg ( $i m age file );
$i m age = contrast ( $i m age );
imagejpeg ( $i m age , $i m age file );
?>

chris at drunkenpirates dot co dot uk
14-Sep-2003 04:50

/*
An example combining the use of ImageColorAllocate, Imagesetpixel, Imagecopyresized and some basic Trig

Header ( «Content-type: image/png» );

$h eight = 128 ;
$w idth = 128 ;

$i m A = ImageCreate ( $w idth , $h eight );
$i m B = ImageCreate ( $w idth * 4 , $h eight * 4 );
$b ckA = ImageColorAllocate ( $i m A , 0 , 0 , 0 );
$b ckB = ImageColorAllocate ( $i m B , 0 , 0 , 0 );

//GENERATE GRAY SCALE PALLETE

for ( $c = 0 ; $c $c ++) <
ImageColorAllocate ( $i m A , $c , $c , $c );
>

$m = rand ( 0 , 10 );
for ( $c = 0 ; $c $c ++) <
$s = ( sin ( deg2rad ( $c * 360 * $m / 128 ) )+ 1 )* 127 ;
$c ol _arr [ $c ] = $s ;
>
for ( $y = 0 ; $y $h eight ; $y ++) <
for ( $x = 0 ; $x $w idth ; $x ++) <
$i m g A [ $x ] [ $y ] = $c ol _arr [ $x ] ;
>
>
for ( $y = 0 ; $y $h eight ; $y ++) <
for ( $x = 0 ; $x $w idth ; $x ++) <
$i m g B [ $x ] [ $y ] = $c ol _arr [ $y ] ;
>
>

for ( $y = 0 ; $y $h eight ; $y ++) <
for ( $x = 0 ; $x $w idth ; $x ++) <
$i m g C [ $x ] [ $y ] = $i m g A [ $x ] [ $y ] + $i m g B [ $x ] [ $y ] ;
$s = $i m g C [ $x ] [ $y ] / 2 ;
Imagesetpixel ( $i m A , $x , $y , $s );
>
>

//RESIZE IMAGE FOR DISPLAY

Imagecopyresized ( $i m B , $i m A , 0 , 0 , 0 , 0 , $w idth * 4 , $h eight * 4 , $w idth , $w idth );
ImagePNG ( $i m B );
?>

dino at nordmark dot dk
31-May-2002 03:28

The example above diden’t work, because of some errors.
This should work and it’s also faster because there is only one 512*512 loop. (but it is still very slow)

$filename = «lena.raw» ;
$w idth = 512 ;
$h eight = 512 ;
$fp = fopen ( $filename , «r» );
$c ontents = fread ( $fp , filesize ( $filename ));
fclose ( $fp );

$i m age = imagecreate ( $w idth , $h eight );

// create greyscale palette because the image is limited to 256 colors
for ( $i = 0 ; $i $i ++)

// This is slow, but probably the only way
for ( $i = 0 ; $i $i ++) <
for ( $j = 0 ; $j $j ++) <
imagesetpixel ( $i m age , $i , $j , ord ( $c ontents [ $i + $j * 512 ] ));
>
>

Илон Маск рекомендует:  Как плавно изменить цвет ссылки
Понравилась статья? Поделиться с друзьями:
Кодинг, CSS и SQL