def vips_call(name, *required, **optional): op = Vips.Operation.new(name) # set required input args i = 0 for prop in op.props: flags = op.get_argument_flags(prop.name) if required_input(flags): if i >= len(required): print 'too few required args!' op.props.__setattr__(prop.name, required[i]) i += 1 if i < len(required): print 'too many required args!' # set optional input args for i in optional.keys(): flags = op.get_argument_flags(i) if optional_input(flags): op.props.__setattr__(i, optional[i]) # call op2 = Vips.cache_operation_build(op) if op2 == None: print Vips.error_buffer() # gather output args out = [] for prop in op2.props: flags = op2.get_argument_flags(prop.name) if required_output(flags): out.append(op2.props.__getattribute__(prop.name)) for i in optional.keys(): flags = op2.get_argument_flags(i) if optional_output(flags): out.append(op2.props.__getattribute__(i)) if len(out) == 1: out = out[0] # unref everything now we have refs to all outputs we want op2.unref_outputs() return out
op = Vips.Operation.new(loader) for prop in op.props: print 'prop.name =', prop.name flags = op.get_argument_flags(prop.name) if flags & Vips.ArgumentFlags.OUTPUT: print '\toutput' if flags & Vips.ArgumentFlags.INPUT: print '\tinput' if flags & Vips.ArgumentFlags.REQUIRED: print '\trequired' print '\tisset', op.argument_isset(prop.name) op.props.filename = sys.argv[1] op2 = Vips.cache_operation_build(op) if op2 == None: print Vips.error_buffer() sys.exit(-1) b = op2.props.out op2.unref_outputs() print 'b.get_width() =', b.get_width() print 'b.props.width =', b.props.width print 'call operation:' op = Vips.Operation.new("add") for prop in op.props: