カスタムパレットのアイコン生成データスクリプトの内容は以下のとおり。PHP のオンラインマニュアルを検索しながらツギハギで作ったものなので、問題点もあると思います。作者免責でご使用ください。また、問題点をみつけたときは、伝言板連絡フォーム でご指摘ください。


<?php
// Painter Custom Palette Icon Data Generator - kaburaya March 2011
$script $_SERVER['PHP_SELF'];
//$title = 'Image to Painter Custom Palette Icon Data Converter';
$title '画像ファイルを Painter のカスタムパレットデータに変換';
$max_size 100000// in bytes
$userfile_temp $_FILES['userfile']['tmp_name'];
$userfile_type $_FILES['userfile']['type'];

function 
print_error($error_message) {
    print 
"<p>$error_message</p>";
}

function 
print_footer() {
print<<<_FOOTER_
<br />
<form class="right" action="
$script" method="post">
&bull; 他のファイルも変換する &raquo; 
<input type="submit" value="Again!" />
</form>
</div>
</div>
</body>
</html>
_FOOTER_;
exit;
}

header('Content-type: text/html');
print<<<_HEADER_
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN"
"http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja" lang="ja">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>
$title</title>
<style type="text/css">
div#container {text-align: center;}
div#main {float: auto; text-align: left; margin: 50px auto; width: 550px; line-height: 150%;}
.right {float: right; text-align: right;}
h1 {font-size: 100%; padding: 6px 8px; background-color: #dde6dd; border-style: dotted none; border-width: 1px; border-color: #80a080;}
p ul {margin: 2px; padding: 0;}
p.note {padding-left: 20px; font-size: 90%; color: firebrick;}
form.framed {margin: 12px 0 ; padding: 12px; border: 1px dotted #80a080; background-color: #fafff0; }
input {margin: 4px 0}
</style>
</head>
<body>
<div id="container">
<div id="main">

_HEADER_;

// アップロード動作をしたか
if ($_POST['posted']) {
// アップロード完了存在確認
if (!$userfile_temp) {
    
$error_message "<span style=\"font-weight: bold; color: red;\">アップロードが完了しませんでした。</span> ファイルサイズの上限は $max_size bytes です。";
    
print_error($error_message);
    
print_footer();
} else {
// ファイルタイプにより分岐
if ($userfile_type == "image/jpeg") {
    
$image imagecreatefromjpeg($userfile_temp);
} elseif (
$userfile_type == "image/png") {
    
$image imagecreatefrompng($userfile_temp);
} elseif (
$userfile_type == "image/gif") {
    
$image imagecreatefromgif($userfile_temp);
} else {
    
$error_message 'アップロードされたファイルが JPEG、PNG、GIF のいずれでもないので、処理できません。';
    
print_error($error_message);
    
print_footer();
}

// すべての条件を満たす場合、以下を実行
$width 30;
$height 30;
$data '';

for (
$y=0$y<$height$y++) {
    for(
$x=0$x<$width$x++) {
        
$rgb imagecolorat($image$x$y);
        
$r = ($rgb >> 16) & 0xFF;
        
$g = ($rgb >> 8) & 0xFF;
        
$b $rgb 0xFF;
        
$hex sprintf("%02x",$r) . sprintf("%02x",$g) . sprintf("%02x",$b) . ' ';
        
$data .= $hex;
    }
}

$data preg_replace('/(.{70})/'"$1\n"$data); // 70文字ずつに行を分ける
$data preg_replace("/ \n/""<br />\n"$data); // 行末のスペースを改行タグに
print $data;
print_footer();
}
} else {
// 送信動作がまだなら初期画面を表示
print<<<_DIALOG_
<h1>$title</h1>

<ul>
<li>Corel Painter ver. 8.1 以降の形式(XML)の <strong>カスタムパレット</strong> の <strong>アイコンデータ</strong>(文字列)を画像ファイル(JPEG、PNG、GIF)から生成するスクリプトです。</li>
<li>ブラシアイコンなどと同じ 30 x 30 ピクセルのサイズの画像ファイルを手元のファイルから選択し、「変換」ボタンで実行します。文字列が表示されるので、ブラウザからコピーして使ってください。</li>
<li>受付ファイルサイズ上限は 
$max_size バイトです。画像サイズが大きすぎる場合は左上のみを使って処理します。</li>
</ul>

<form class="framed" action="
$script" method="post" enctype="multipart/form-data">
<input type="hidden" name="MAX_FILE_SIZE" value="
$max_size" />
<input type="hidden" name="posted" value="yes" />
<input type="file" name="userfile" accept="image/jpeg" size="60" />&nbsp; 
<input type="submit" value="変換" />
</form>

<p class="note">カスタムパレットのデータを直接編集すると <strong>データが壊れる</strong> ことがあります。バックアップをとり、テキストエディタで慎重に編集してください。この変換スクリプトで生成したデータを使って編集した結果について、スクリプト作者は責任を負いません。</p>

</div>
</div>
</body>
<html>
_DIALOG_;
exit;
}
?>

(2011/03/03)