# Re: [Gimp-developer] Optimizing border-like selection in python

```  Calculating a new selection from the current selection would be faster
(I think):```
```
def create_border(image, selection_type='rectangle', size=1):
is_selection, x1, y1, x2, y2 = pdb.gimp_selection_bounds(image)

if is_selection:
if size < 1:
size = 1
if selection_type =='rectangle':
pdb.gimp_rect_select(image, x1+size, y1+size,
(x2-x1)-(size*2), (y2-y1)-(size*2), CHANNEL_OP_SUBTRACT, False, 0)
elif selection_type == 'ellipse':
pdb.gimp_ellipse_select(image, x1+size, y1+size,
(x2-x1)-(size*2), (y2-y1)-(size*2), CHANNEL_OP_SUBTRACT, True, False, 0)
else:

def test_plugin(image, drawable):
image.undo_group_start()

create_border(image)    # A rectangular selecion with default
settings...
#create_border(image, selection_type='ellipse', size=3)     # Or
Ellipse with custom settings...

# Fill
pdb.gimp_edit_fill(drawable, 0)
pdb.gimp_selection_none(image)

image.undo_group_end()

On 09/24/2010 10:19 AM, Ofnuts wrote:
>    Hi,
>
> My code needs to do a one-pixel-wide selection, at distance "x" from the
> current selection.  This looks a lot like a border selection except that
> the border selection creates at best a two-pixel wide ribbon and I only
> want one (but if I'm wrong, please tell me how to :-)
>
> So far my code goes like this:
>
> # Selects pixels that are between x and x+1 pixels from
> # the original selection. Bumping the selection by one
> # each time doesn't work, a small circle degenerates into
> # a square with rounded corners instead of a big circle.
>       def select_ribbon(self,image,selection,dist):
>           pdb.gimp_selection_grow(image,dist+1)
>           outer=pdb.gimp_selection_save(image)
>           pdb.gimp_selection_grow(image,dist)
>           inner=pdb.gimp_selection_save(image)
>           image.remove_channel(outer)
>           image.remove_channel(inner)
>
> That works, but can be slow (especially since it's at the core of a
> loop). Is there any better way? Or useless code to jettison?
>
> Next improvement is to create a 3-pixels selection and feather it one
> pixel. Anything to be wary of?
>
> --
> Ofnuts
>
> _______________________________________________
> Gimp-developer mailing list
> Gimp-developer@lists.XCF.Berkeley.EDU
> https://lists.XCF.Berkeley.EDU/mailman/listinfo/gimp-developer

_______________________________________________
Gimp-developer mailing list
Gimp-developer@lists.XCF.Berkeley.EDU
https://lists.XCF.Berkeley.EDU/mailman/listinfo/gimp-developer
```