2011-02-17 3 views
6

यहां सामान्य उपयोग केस एक उपयोगकर्ता है जो एक सफेद/रंग पृष्ठभूमि के साथ एक जेपीईजी लोगो अपलोड कर रहा है। यह सफेद पिक्सेल को पारदर्शी लोगों में बदलने के लिए (काफी) सरल है, लेकिन यह अलियासिंग कलाकृतियों को छोड़ देता है। एक आदर्श समाधान अनिवार्य रूप से एलियासिंग (पूर्व ज्ञात पृष्ठभूमि रंग दिया गया) "पूर्ववत" करेगा। कम से कम, समाधान को ImageMagick (http://imagemagick.org/Usage/scripts/bg_removal) के लिए bg_removal स्क्रिप्ट को हरा देना चाहिए।क्या एक उच्च गुणवत्ता वाले, प्रोग्रामेटिक समाधान हैं जो एक जेपीजी को एक अपारदर्शी पृष्ठभूमि के साथ एक पारदर्शी पृष्ठभूमि के साथ एक पीएनजी में बदलने के लिए हैं?

+1

मुझे यकीन है कि आप क्या बात कर रहे हैं नहीं कर रहा हूँ "एलियासिंग कलाकृतियों" के रूप में। शायद आप प्रदर्शित करने के लिए एक छोटी छवि शामिल कर सकते हैं। – nobar

+4

एलियासिंग वह प्रतिबिंबित कर रहा है इस तथ्य से आता है कि, विशेष रूप से किसी ऑब्जेक्ट की सीमा पर, पिक्सेल का रंग पृष्ठभूमि का मिश्रण होता है और ऑब्जेक्ट का होता है रंग –

+0

@ नोबार: (एंटी-) अलियासिंग कलाकृतियों कुछ बहुत आम है। ओपी के सवाल और तथ्य था वह ImageMagick का उल्लेख करता है और तथ्य यह है कि आप नहीं जानते कि अलियासिंग कलाकृतियों क्या हैं, मुझे संदेह है कि आप उसकी मदद कर सकेंगे;) GIYF – SyntaxT3rr0r

उत्तर

1

जैसा कि वादा किया गया है, यहां सामान्य सफेद -> अल्फा उपयोग केस के लिए एक समाधान समाधान है। यह मानक गिंप स्थापना (2.6.8) के साथ उबंटू 10.04.1 एलटीएस सर्वर पर चल रहा है।

from gimpfu import * 

def run(input_filepath): 
    image = pdb.gimp_file_load(input_filepath, input_filepath) 
    image.disable_undo() 
    layer = image.active_layer 
    if not layer.is_rgb: 
     pdb.gimp_image_convert_rgb(image) 

    white = gimpcolor.RGB(1.0, 1.0, 1.0, 1.0) 
    bg_color = pdb.gimp_image_pick_color(image, layer, 0, 0, True, False, 0) 
    if bg_color == white: 
     pdb.plug_in_colortoalpha(image, layer, bg_color) 
     layer_copy = layer.copy() 
     image.add_layer(layer_copy) 
     image.merge_visible_layers(CLIP_TO_IMAGE) 

    pdb.file_png_save_defaults(image, image.active_layer, input_filepath, input_filepath) 

run('%(input_filepath)s') 

मैं input_filepath साथ डाला अजगर (Django के भीतर) से इस कोड निष्पादित उपप्रक्रिया मॉड्यूल (का उपयोग कर code_as_string एक स्ट्रिंग के रूप में ऊपर कोड है,:

gimp_args = (settings.PATH_TO_GIMP, 
    '-i', 
    '--batch-interpreter=python-fu-eval', 
    '-b', code_as_string, 
    '-b', 'from gimpfu import pdb; pdb.gimp_quit(True)') 

environ = os.environ.copy() 
environ['GIMP2_DIRECTORY'] = settings.PATH_TO_GIMP_DIR 
p = subprocess.Popen(gimp_args, stdout=subprocess.PIPE, stderr=subprocess.STDOUT, env=environ) 
rc = p.wait() 
if rc: 
    logging.error(p.stdout.read()) 
2

जीआईएमपी में "रंग टू अल्फा" एल्गोरिदम ऐसा लगता है कि यह एक बहुत अच्छा काम करता है। स्रोत जीपीएल है और here पाया जा सकता है। लोगो की तरह कुछ के साथ जीआईएमपी एल्गोरिदम क्या करता है इसका एक प्रदर्शन here है, और रंग-से-अल्फा के लिए जीआईएमपी मैनुअल पेज here है।

ऐसा लगता है कि यह प्रोग्राम करने के लिए सबसे सरल तरीका GIMP batch mode का उपयोग करना होगा।

+0

प्रारंभिक परीक्षण प्रभावशाली दिखता है, बहुत कठिन परीक्षण मामले के लिए पहले और बाद में देखें: [सफेद बीजी के साथ जेपीजी के रूप में] (http://www.treatful.com/static/images/Google_Logo.jpg) -> [ पारदर्शी बीजी के साथ पीएनजी के रूप में] (http://www.treatful.com/static/images/Google_Logo.png) –

+0

वाह, यह एक कठिन मामला है। पत्र अर्द्ध पारदर्शी बन गए हैं, लेकिन कम से कम एंटी-एलियासिंग अच्छा लग रहा है! – nobar

+0

मैंने पत्र पारदर्शीता से छुटकारा पाने में मदद के लिए शेष छवि को "दोगुना" करने का एक अतिरिक्त कदम जोड़ा है, मैं पूर्ण जीआईएमपी पायथन स्क्रिप्ट + इसे जल्द ही निष्पादित करने के लिए कैसे पोस्ट करूंगा। मुझे सही दिशा में शुरू करने के लिए धन्यवाद। –

संबंधित मुद्दे