需要指导我的Jython/Python小插曲代码

0 投票
1 回答
948 浏览
提问于 2025-04-19 12:39

我在处理我的CGI图片和渐变轮廓头像时遇到了一些问题。我想制作一张渐变效果的图片,要求是图片的边缘稍微暗一些,但中间的部分要保持正常亮度。现在我做的步骤看起来都没问题,但我的图片中间却变得很暗,而不是像我想要的那样,边缘稍微暗一点。

这是我目前的代码:

def main(): 
inputPic = makePicture(pickAFile()) 
vignette = makePicture(pickAFile())
 addVignette(inputPic, vignette) 
def addVignette(inputPic, vignette): 
if getWidth(inputPic) == getWidth(vignette) and getHeight(inputPic) == getHeight(vignette):
  explore(inputPic)
  explore(vignette)
  px1 = getPixels(inputPic)
  px2 = getPixels(vignette) 
 for px in getPixels(inputPic): 
 x = getX(px)
  y = getY(px)
  px2 = getPixelAt(vignette, x, y)
  x2 = getX(px2)
  y2 = getY(px2)
  r1 = getRed(px)
  r2 = getRed(px2)
  g1 = getGreen(px)
  g2 = getGreen(px2)
  b1 = getBlue(px)
  b2 = getBlue(px2)
  newR = (r1-r2+104)
  newG = (g1-g2+88)
  newB = (b1-b2+48)
  newC = makeColor(newR, newG, newB)
  setColor(px, newC)
 explore(inputPic)
 folder = pickAFolder()
 filename = requestString("enter file name: ")
 path = folder+filename+".jpg" 
 writePictureTo(inputPic, path)

https://i.stack.imgur.com/PqW7K.jpg

图片1是我想要的效果

https://i.stack.imgur.com/PtS4U.jpg

图片2是我在编写代码后得到的结果

如果有人能给我一些建议,帮我找到正确的方向,我会非常感激。

1 个回答

0

在我第一次尝试的前三次完全搞错之后,我终于在我小伙伴“取模运算符”的帮助下搞明白了这个问题。

def addVignette(inputPic, vignette):
  # Create empty canvas
  canvas = makeEmptyPicture(getWidth(inputPic), getHeight(inputPic))

  for x in range(0, getWidth(inputPic)):
    for y in range(0, getHeight(inputPic)):
      px = getPixel(canvas, x, y)
      inputPixel = getPixel(inputPic, x, y)
      vignettePixel = getPixel(vignette, x, y)

      # Make a new color from those values
      newColor = getNewColorValues(inputPixel, vignettePixel)

      # Assign this new color to the current pixel of the input image
      setColor(px, newColor)

  explore(canvas)

def getNewColorValues(inputPixel, vignettePixel):

  inputRed = getRed(inputPixel)
  vignetteRed = getRed(vignettePixel)
  inputGreen = getGreen(inputPixel)
  vignetteGreen = getGreen(vignettePixel)
  inputBlue = getBlue(inputPixel)
  vignetteBlue = getBlue(vignettePixel)

  newR = inputRed - (255 % vignetteRed) / 3
  newG = inputGreen - (255 % vignetteGreen) / 3
  newB = inputBlue - (255 % vignetteBlue) / 3

  newC = makeColor(newR, newG, newB)
  return newC

撰写回答