php中使用Imagick实现图像直方图的实现代码
玩过单反相机的人应该都知道图像直方图(Image Histogram),简单点说,它通过计算每个色阶在总像素中所占的比例来反映图像的曝光情况。
我并不打算详细解释专业名词,有兴趣的读者可以查阅文章结尾处的参考链接,那里有通俗易懂的解释:
我们先找一个例子图像(用Canon 550D拍的):
例子图片:butterfly.jpg
下面看看如何使用Imagick实现图像直方图:
代码如下:
$file = 'butterfly.jpg';
$size = array(
'width' => 256,
'height' => 100,
);
$image = new Imagick($file);
$histogram = array_fill_keys(range(0, 255), 0);
foreach ($image->getImageHistogram() as $pixel) {
$rgb = $pixel->getColor();
$histogram[$rgb['r']] += $pixel->getColorCount();
$histogram[$rgb['g']] += $pixel->getColorCount();
$histogram[$rgb['b']] += $pixel->getColorCount();
}
$max = max($histogram);
$threshold = ($image->getImageWidth() * $image->getImageHeight()) / 256 * 12;
if ($max > $threshold) {
$max = $threshold;
}
$image = new Imagick();
$draw = new ImagickDraw();
$image->newImage($size['width'], $size['height'], 'white');
foreach ($histogram as $x => $count) {
if ($count == 0) {
continue;
}
$draw->setStrokeColor('black');
$height = min($count, $max) / $max * $size['height'];
$draw->line($x, $size['height'], $x, $size['height'] - $height);
$image->drawImage($draw);
$draw->clear();
}
$image->setImageFormat('png');
$image->writeImage('histogram.png');
?>
注:代码中之所以加入$threshold这个阀值,是因为有时候某些色阶的值可能会非常大,如果不做处理会干扰最终的生成效果。至于为什么要先除256,接着又乘12,没有什么道理可言,都是我一拍脑袋决定的,你也可以使用别的方法。
最终生成的直方图和Photoshop的效果基本一样,这里就贴一下Photoshop的:
Photoshop生成的直方图
注:使用Photoshop打开图片后,选择窗口,然后选择直方图即可。
本文说的实际上只是RGB通道的直方图绘制方法,原理上,RGB直方图是红绿蓝直方图累加的结果,至于红绿蓝三原色各自的直方图,上面代码稍加修改即可。
注:XARG.ORG上有一个HTML5实现的图像直方图开源项目,效果不错,值得学习。
最后顺便说一下,如果你对摄影知识感兴趣,可参考:。

ホットAIツール

Undresser.AI Undress
リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover
写真から衣服を削除するオンライン AI ツール。

Undress AI Tool
脱衣画像を無料で

Clothoff.io
AI衣類リムーバー

AI Hentai Generator
AIヘンタイを無料で生成します。

人気の記事

ホットツール

メモ帳++7.3.1
使いやすく無料のコードエディター

SublimeText3 中国語版
中国語版、とても使いやすい

ゼンドスタジオ 13.0.1
強力な PHP 統合開発環境

ドリームウィーバー CS6
ビジュアル Web 開発ツール

SublimeText3 Mac版
神レベルのコード編集ソフト(SublimeText3)

ホットトピック









PHP と Imagick による画像透明化の概要: 画像透明化は一般的な画像処理要件であり、画像内の特定の色または領域を透明にすることで、さまざまな特殊効果を実現できます。この記事では、php と Imagick ライブラリを使用して画像の透過処理を実現する方法と、参考となるコード例を紹介します。 Imagick は、画像の読み込み、編集、保存など、豊富な画像処理機能を提供する強力な画像処理ライブラリです。 Imagick では、

PHP と Imagick を使用した画像サイズ変更のベスト プラクティス 引用: 現代のインターネット時代では、画像は Web ページとアプリケーションの不可欠な部分です。ユーザー エクスペリエンスを向上させ、Web ページの読み込みを高速化するには、通常、さまざまな表示デバイスや解像度に適応するように画像のサイズを変更する必要があります。この記事では、php と Imagick ライブラリを使用して画像サイズ変更のベスト プラクティスを実装する方法を紹介し、コード例を示します。 1. Imagick 拡張機能をインストールします。開始する前に、まずサーバーが

PHP と Imagick を使用して画像の色を調整する方法 はじめに: Web 開発では、デザイン要件を満たすため、または画像効果を最適化するために、画像の色を調整する必要がある場合があります。 PHP は豊富な画像処理ライブラリを提供しており、その中でも Imagick は写真の色を簡単に調整できる強力で使いやすい拡張機能です。この記事では、PHPとImagickを使って画像の色調整を実現する方法と、対応するコード例を紹介します。 1. Imagick 拡張機能をインストールします。

PHP と Imagick を使用して画像の色変換を実現する はじめに: Web 開発では画像を処理する必要がよくありますが、一般的なニーズの 1 つは画像の色を変更することです。この記事では、PHP と Imagick 拡張機能を使用して画像の色変換を実現する方法を紹介します。 Imagick は、PHP 用の強力な画像処理拡張機能であり、画像の切り取り、拡大縮小、回転など、機能豊富なメソッドを多数提供します。色変換に関しては、Imagick は次のことを実現するための一連のメソッドも提供します。

php と Imagick による画像のシャープ化 最新の画像処理では、シャープ化は一般的なテクノロジであり、画像の細部と明瞭さを向上させ、より鮮明にすることができます。この記事では、php と Imagick ライブラリを使用して画像の鮮明化を実現する方法を紹介します。まず、Imagick ライブラリがサーバーにインストールされていることを確認してください。インストールされていない場合は、次のコマンドを使用してインストールできます: sudoapt-getinstallphp-imagick

PHP と Imagick を使用して画像の特殊効果処理を実装する 概要: 画像の特殊効果処理により、画像に芸術的な効果を追加したり、画像の外観を変更したりできます。 PHP と Imagick では、多くの一般的な画像特殊効果処理を実装できます。この記事では、いくつかの一般的な特殊効果処理を紹介し、対応するコード例を示します。 Imagick 拡張機能のインストール 開始する前に、Imagick 拡張機能がインストールされていることを確認してください。インストールされていない場合は、次の手順でインストールできます。 #Install Imagick extension $pec

PHP と Imagick を使用して画像スライス効果を実現する Web 開発では、画像処理は非常に一般的な要件です。その中でも、写真のスライス効果は非常に一般的な加工方法です。大きな画像をいくつかの小さな画像に分割することで、画像のロード時間を効果的に短縮し、画像コンテンツをより柔軟に表示できます。この記事では、php および Imagick 拡張機能を使用して画像のスライス効果を実現する方法を紹介します。まず、php と Imagick 拡張機能がサーバーにインストールされていることを確認する必要があります。ない場合

PHP と Imagick を使用して画像モザイク効果を実現する モザイクは一般的な画像編集効果であり、多くのアプリケーション シナリオで広く使用されています。画像をモザイク処理することにより、元の画像の細部をいくつかの小さな長方形または正方形のブロックに変換することができ、それによってプライバシーを保護したり、機密情報を隠したりする効果が得られます。この記事では、PHP と Imagick ライブラリを使用して画像のモザイク効果を実現する方法を紹介します。まず、Imagick が PHP サーバーにインストールされていることを確認する必要があります。
