0

PHP は初めてで、サーバー上の JPEG 画像から色を削除しようとしています。理想的には、画像内の黒またはグレー以外のすべての色を削除できるようにしたいと考えています。これまでに行ったことのコードを以下に投稿しましたが、機能していません (または機能していますが、正しく表示されていません)。コードを実行すると、画面に何も表示されません。これは、これまでの index.php ファイルのすべてのコードです。

$my_image='Photo.jpg';
header('Content-Type: image/jpeg');

$img = imagecreatefromjpeg($my_image); 
$color = imagecolorallocate($img, 255, 255, 255);
imagecolortransparent($img, $color);
imagejpeg($my_image, null);

誰かが私の問題を解決する方法を教えてもらえますか? ありがとうございました!

4

1 に答える 1

1

いくつかの問題があります。

  • imagecreatefromstringファイルから画像を読み込むのではなく、画像データを含む文字列を受け取ります。imagecreatefromjpegファイルから読み込みます。
  • ページを画像として表示するには、適切なヘッダーを送信する必要があります。例えば、header('Content-Type: image/jpeg');
  • imagejpeg画像を出力します。戻り値は、成功したかどうかだけです。ドキュメントの例を見てください。

黒/灰色/白以外のすべての色を削除するには、次のように各ピクセルを個別に確認する必要があります。

<?php
header('Content-type: image/jpeg');
$image = imagecreatefromjpeg('file.jpg');

$white = imagecolorallocate($image, 255, 255, 255);

for($x = 0; $x < imagesx($image); $x++) {
   for($y = 0; $y < imagesy($image); $y++) {
      $pixel = imagecolorat($image, $x, $y);
      if(!isGray($pixel))
         imagesetpixel($image, $x, $y, $white);
   }
}

imagejpeg($image);

function isGray($pix) {
   $r = ($pix >> 16) & 0xFF;
   $g = ($pix >> 8) & 0xFF;
   $b = $pix & 0xFF;
   return ($r == $g) && ($g == $b);
}
?>

JPG を使用しているため、これ以上簡単な方法は考えられません。JPG 圧縮プロセスが作成するアーティファクトは単色を乱すため、たとえば赤や青をチェックするだけでは機能しません。

コードはhttps://stackoverflow.com/a/1607796/246847から改作されました。

于 2012-11-04T06:09:16.107 に答える