Попробуем иначе, вот код:
Code:
<?php
$im = "pants.gif"; // картинка которую будем раскрашивать
$hexcolor = "0000020C0418072409300B400D4C0F5812641470167C367876749670D66CF66836655661765DB659D6551552354E754A9546B542F53E153B55377533B52FD52B"; // цвета из hues.mul
// Преобразование цветов в RGB
$colors = Array();
For( $i = 0; $i < StrLen( $hexcolor ) / 4; $i ++ ){
$colors[ $i ] = Array();
$tmp = (String)DecBin( HexDec( SubStr( $hexcolor, $i * 4, 4 ) ) );
While( StrLen( $tmp ) < 16 ){
$tmp = "0" . $tmp;
}
$colors[ $i ][ 'r' ] = BinDec( SubStr( $tmp, 9, 5 ) ) * 8;
$colors[ $i ][ 'g' ] = BinDec( SubStr( $tmp, 14, 2 ) . SubStr( $tmp, 0, 3 ) ) * 8;
$colors[ $i ][ 'b' ] = BinDec( SubStr( $tmp, 3, 5 ) ) * 8;
}
// Вывод палитры цветов
if( @$_GET['show'] == 'hue' ){
$im = ImageCreateTrueColor( 640, 240 );
For( $i = 0; $i < 32; $i ++ ){
$color = ImageColorAllocate( $im, $colors[ $i ]['r'], $colors[ $i ]['g'], $colors[ $i ]['b'] );
ImageFilledRectangle( $im, $i * 20, 0, $i * 20 + 20, 200, $color );
// нехитрая конструкция выбора цвета для шрифта - чёрный или белый.
$color = $colors[ $i ]['r'] + $colors[ $i ]['g'] + $colors[ $i ]['b'] < 255*3/2 ? 255 : 0;
$color = ImageColorAllocate( $im, $color, $color, $color );
ImageStringUp(
$im, 5, $i * 20, 195,
"Color: #" .
strtoupper( sprintf( "%02s", dechex( $colors[ $i ][ 'r' ] ) ) ) .
strtoupper( sprintf( "%02s", dechex( $colors[ $i ][ 'g' ] ) ) ) .
strtoupper( sprintf( "%02s", dechex( $colors[ $i ][ 'b' ] ) ) ) .
" (" . SubStr( $hexcolor, $i * 4, 4 ) . "h)",
$color
);
}
$color = ImageColorAllocate( $im, 0xFF, 0xFF, 0xFF );
ImageFilledRectangle( $im, 0, 200, 640, 240, $color );
$color = ImageColorAllocate( $im, 0x00, 0x00, 0x00 );
ImageString( $im, 5, 2, 200, "Hex:" . substr( $hexcolor, 00, 64 ), $color );
ImageString( $im, 5, 2, 220, "Hex:" . substr( $hexcolor, 64, 64 ), $color );
Header( "Content-Type: image/gif" );
ImageGif( $im );
ImageDestroy( $im );
exit;
}
// раскраска картинки
$im = ImageCreateFromGif( $im );
for( $i = 0; $i < ImageColorsTotal( $im ); $i ++ ){
$color = ImageColorsForIndex( $im, $i );
if( Implode( "", $color ) != "0000" ){
$gray = floor( ( $color['red'] + $color['blue'] + $color['green'] ) / 24 );
ImageColorSet( $im, $i, $colors[ $gray ][ 'r' ], $colors[ $gray ][ 'g' ], $colors[ $gray ][ 'b' ] );
}
}
// вывод результата
Header( "Content-Type: image/gif" );
ImageGif( $im );
ImageDestroy( $im );
exit;
?>
Тут что-то неправильно и ты можешь сказать, как было бы корректнее.. Верно?)
PS: Я обычно не использую заглавные буквы в ф-циях, выделил специально для тех, кто незнаком с пхп - код в принципе интуитивно понятен.
PPS: Спасибо за информацию, будем знать, как оно хранится в файлах уо..