2014-09-23 4 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.'; 
} 

?> 
Смежные вопросы