이미지 데이터를 이동하면서 이미지 색상을 분석하여 이미지 색상 목록을 만드는 방식입니다.
네이버 그라폴리오 사이트를 보면 색상별로 이미지를 추천해주는 기능이 있습니다.
PHP로 이미지를 파싱하고 이와 같은 목록을 만들고 싶었습니다.
구체적으로 이미지 색상 목록을 내가 원하는 색상 목록으로 만들고 싶었습니다. 그래서 아래 두 가지를 섞어서 만들었습니다.
https://grafolio.naver.com/works/list.grfl
크리에이터의 놀이터: 그라폴리오
매주 그림, 음악, 사진 등 크리에이터의 다양한 이야기를 기대하실 수 있습니다.
grafolio.naver.com
사용 도구
https://github.com/bachors/PHP-extract-Image-color-Class
GitHub – bachors/PHP-Extract-Image-Color-Class: PHP 이미지 색상 클래스 추출
PHP 이미지 색상 클래스를 추출합니다. GitHub에서 계정을 생성하여 Bachelor/PHP-Extract-Image-Color-Class 개발에 기여하십시오.
github.com
https://stackoverflow.com/questions/4485229/rgb-to-closest-predefined-color
RGB를 다음 미리 정의된 색상으로
편집: 주어진 답변으로 이 함수를 grabclosestcolor($r, $g, $b){ $colors = array(array(124,12,12),array(7,7,11),array 함수에 추가했습니다. (110,224,219 ) made ,Array(123,123,123),Array(124,177,74),…
stackoverflow.com
또한 stackoverflow 중간에 클래스에 getNearestColor 함수를 추가해주세요.
나는 약간의 조정으로 여기에서 사용합니다.
제 경우에는 URL을 파싱하기 때문에 다음과 같이 사용했습니다. 샘플 코드를 확인하세요!
<?
include(__DIR__.'class_imagecolor.php');
$imageClass = new ImageColor();
$url = "https://picsum.photos/536/354";
$color = $imageClass->url($url,1000);
print_r($color);
?>
** 원하는 색상 목록과 비교하여 분석하고 싶어서 약간의 조정을 했습니다.
클래스 파일에서
getNearestColor 함수의 $palette 부분을 배열 형식으로 다시 변경합니다.
함수를 추출할 때 아래와 같이 getNearestColor 함수를 사용하여 각 색상에 대한 개수를 늘립니다.
function extracting($image, num)
{
....
imagedestroy($image);
$white=$red=$orange=0; // $palette 배열과 동일한값을 세팅!
...
foreach($color as $key => $val){
//여기서 하단에 추가해줍니다!
$sort = $this->getNearestColor($hex);
if( $sort )
{
$$sort += $percentage;
}
}
}
이렇게 하면 각 색상에 대해 포인트를 얻을 수 있습니다. $num이 1000으로 설정되어 있으므로 1000에 대한 점수는 백분율로 주어지는 것 맞죠?
저 같은 경우는 상위 3가지 컬러만 모아서 표현했어요!
막상 해보려니 막막했는데 고수님들이 잘해주셔서 쉽게 구현했습니다.
단점은 내가 지정하는 팔레트의 값에 따라 결과가 크게 달라진다는 것입니다.
많은 테스트를 통해 정립하셔야 할 것 같습니다^^
그게 다야!