2014-09-23 5 views
0

GD를 사용하여 주어진 색상 (RGB)에 이미지 자원 (RGBA)의 모든 픽셀을 곱할 수 있습니까? 예를 들어, 지정된 색조가 빨간색 (255, 0, 0)이면 이미지 리소스의 검정색 픽셀은 검정색을 유지해야하며 (255 * 0 = 0이므로) 더 밝은 픽셀은 빨간색 색조 계수에 더 많은 영향을 받아야합니다. PHP GD : 틴트 색상으로 이미지 색상 곱하기

나는
imagefilter($sprite, IMG_FILTER_COLORIZE, 255, 0, 0); 

을 시도하지만 검은 색으로 만 픽셀을 변경합니다. NEGATE, IMG_FILTER_COLORIZE, NEGATE도 작동하지 않습니다. 이것은 나를 위해 작동하는 것 같다

답변

0

:

<?php 
// function for creating images from any uploaded 

function imageCreateFromAny($filepath) { 

    $type = exif_imagetype($filepath); // [] if you don't have exif you could use getImageSize() 
    $allowedTypes = array( 
     1, // [] gif 
     2, // [] jpg 
     3, // [] png 
     6 // [] bmp 
    ); 
    if (!in_array($type, $allowedTypes)) { 
    return false; 
    } 
    switch ($type) { 
     case 1 : 
      $im = imageCreateFromGif($filepath); 
     break; 
     case 2 : 
      $im = imageCreateFromJpeg($filepath); 
     break; 
     case 3 : 
      $im = imageCreateFromPng($filepath); 
     break; 
     case 6 : 
      $im = imageCreateFromBmp($filepath); 
     break; 
    }  
    return $im; 
} 

// set up variables 
$filter_r=255; 
$filter_g=0; 
$filter_b=0; 
$suffixe="-red"; 
$path="original-source/image.jpg"; 

if(is_file($path)){ 
    $image=imageCreateFromAny($path); 

    // invert inteded color "red" 
    $filter_r_opp = 255 - $filter_r; // = 0 
    $filter_g_opp = 255 - $filter_g; // = 255 
    $filter_b_opp = 255 - $filter_b; // = 255 
    // color is now "aqua" 

    /* FAST METHOD */ 
    imagefilter($image, IMG_FILTER_NEGATE); 
    imagefilter($image, IMG_FILTER_COLORIZE, $filter_r_opp, $filter_g_opp, $filter_b_opp); 
    imagefilter($image, IMG_FILTER_NEGATE); 

    $new_path=substr($path,0,strlen($path)-4).$suffixe.".jpg"; 
    imagejpeg($image,$new_path); 

    imagedestroy($image); 

    echo 'Red shading success.'; 
} 
else { 
    echo 'Red shading failed.'; 
} 

?>