2017-05-31 25 views
0

我嘗試使用Wand並找不到亮度對比命令的任何映射。Python Wand vs imagemagick亮度對比命令

source img

  • 儘量選用調節改變亮度:

    value = 100 + value # no changes = 0 in console and 100 in wand img.modulate(brightness=value)

,我得到了一些奇怪的文物有白色像素: brightness change attempt

  • 對於對比度魔杖工作剛剛contrast_stretch(),我可以不知道如何做這樣的事情

    convert '-brightness-contrast 0x%d'

回答

1

幸運的是,-brightness-contrast只是調用-function Polynomial方法,這是在實現。需要一些非常簡單的數學來將brightness x contrast參數轉換爲slop x intercept

import math 
from wand.image import Image 

class MyImage(Image): 
    def brightness_contrast(self, brightness=0.0, contrast=0.0): 
     slope=math.tan((math.pi * (contrast/100.0+1.0)/4.0)) 
     if slope < 0.0: 
      slope=0.0 
     intercept=brightness/100.0+((100-brightness)/200.0)*(1.0-slope) 
     self.function("polynomial", [slope, intercept]) 

with MyImage(filename="rose:") as img: 
    img.brightness_contrast(0.0, 10.0) 
    img.save(filename="rose.png") 

rose.png

+0

很簡單:)是的,它的作品,但我不知道怎麼樣。不過imagemagick也是我的黑盒子。我只是不明白爲什麼Wand開發人員不像shell那樣創建類似的API。 – user7001187

+1

作爲解釋,如果要將亮度增加10%,則使用ImageMagick -modulate(110,100,100)的等效值。但你似乎想改變對比度而不是最亮的。你可以使用等價的等級0x90%或+等級0x110%來做到這一點。在線性模式下使用等價的函數多項式,可以得到兩個參數a和b,它們等價於斜率和截距。斜率控制對比度和截距控制亮度。 – fmw42

+0

絕對! ['Image.modulate'](http://docs.wand-py.org/en/0.4.4/wand/image.html#wand.image.BaseImage.modulate)&['Image.level'](http ://docs.wand-py.org/en/0.4.4/wand/image.html#wand.image.Image.level)存在於'wand'庫中。 – emcconville