• 首页
  • vue
  • TypeScript
  • JavaScript
  • scss
  • css3
  • html5
  • php
  • MySQL
  • redis
  • jQuery
  • imagecolorresolve()

    (PHP 4, PHP 5, PHP 7)

    取得指定颜色的索引值或有可能得到的最接近的替代值

    说明

    imagecolorresolve(resource $image,int $red,int $green,int $blue): int

    本函数可以保证对所请求的颜色返回一个颜色索引,要么是确切值要么是所能得到最接近的替代值。

    如果从文件创建了图像,只有图像中使用了的颜色会被辨析。仅出现在调色板中的颜色不会被辨析。

    参见imagecolorclosest()。

    Okay, so sometimes it's really IMPORTANT to get the exact color you want, only it's not *IN* the Image, and ImageColorResolve just isn't "close enough".
    The following code is a disgustingly gross hack, rather slow, but it does that.
    $colorcount = array();
    for ($x = 0; $x < $width; $x++){
      for ($y = 0; $y < $height; $y++){
        $colorindex = imagecolorat($jpg, $x, $y);
        if (!isset($colorcount[$colorindex])){
          $colorcount[$colorindex] = 1;
        }
        else{
          $colorcount[$colorindex]++;
        }
      }
    }
    asort($colorcount);
    reset($colorcount);
    $black = imagecolorexact($jpg, 0, 0, 0);
    if ($black == -1){
      $goner = key($colorcount);
      $rgb = imagecolorsforindex($jpg, $goner);
      #error_log("Need black: About to kill $goner ($rgb[red], $rgb[green], $rgb[blue]) which was only used in $colorcount[$goner] pixels", 0);
      unset($colorcount[$goner]);
      imagecolordeallocate($jpg, $goner);
      $black = imagecolorallocate($jpg, 0, 0, 0);
    }
    if ($black == -1){
      $black = imagecolorresolve($jpg, 0, 0, 0);
      #error_log("Damn! STILL couldn't allocate the color!", 0);
    }