Compare commits
4 Commits
Author | SHA1 | Date |
---|---|---|
|
a7d9ccf0da | |
|
80eb0edaec | |
|
0a29707c3c | |
|
bbace1896a |
56
README.md
56
README.md
|
@ -1,3 +1,57 @@
|
||||||
# Image Editor Plus
|
# Image Editor Plus
|
||||||
|
|
||||||
Image Editor Plus is an add-on that lets you modify your image in seconds. Clear, fill, flip, rotation, adjusting colors, and applying some filters in just a few clicks without external editors such as PhotoShop or Gimp.
|

|
||||||
|
|
||||||
|
Image Editor Plus is a Blender add-on that lets you modify your image in seconds. Clear, fill, flip, rotation, adjusting colors, and applying some filters in just a few clicks without external editors such as PhotoShop or Gimp.
|
||||||
|
|
||||||
|
This add-on extends the UV/Image Editor in Blender and provides the following operations.
|
||||||
|
|
||||||
|
- Cut/Copy/Paste
|
||||||
|
- Clear, Fill
|
||||||
|
- Crop
|
||||||
|
- Adjust hue/saturation
|
||||||
|
- Adjust brightness/contrast
|
||||||
|
- Adjust gamma
|
||||||
|
- Adjust color curve
|
||||||
|
- Replace color
|
||||||
|
- Flip, Rotate
|
||||||
|
- Canvas size
|
||||||
|
- Offset
|
||||||
|
- Apply filters
|
||||||
|
|
||||||
|
NOTE: Currently, text editing is provided as a separate add-on: [Image Editor+ Text Tool](https://superhivemarket.com/products/imedp-text-tool)
|
||||||
|
|
||||||
|
These image operations can be applied to packed/unpacked images, and reflected to the 3D model view immediately.
|
||||||
|
|
||||||
|
You can make a selection to edit the desired area on your image (currently only rectangle selection supported).
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
It's easy to copy/paste a selection or an entire image. The pasted images are displayed as layers, and they can be moved, rotated or scaled.
|
||||||
|
|
||||||
|
NOTE: To display pasted layers in the 3D View, you need to use a [Image Layers Node](https://superhivemarket.com/products/image-layers-node) instead of built-in Texture Node.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## Filters
|
||||||
|
|
||||||
|
By applying the some filters, you can add special effects to your images.
|
||||||
|
|
||||||
|
- Blur
|
||||||
|
- Sharpen
|
||||||
|
- Add noise
|
||||||
|
- Pixelize (Mosaic)
|
||||||
|
- Make seamless
|
||||||
|
- Normal map
|
||||||
|
|
||||||
|
"Make seamless" filter is useful for making your image tileable.
|
||||||
|
|
||||||
|

|
||||||
|
|
||||||
|
## Normal Map Generator
|
||||||
|
|
||||||
|
Normal Map is a texture where every pixel represents a normal vector and is used to add bumps to a surface.
|
||||||
|
|
||||||
|
This add-on uses a height map (black: low, white: high) as input and can convert it to a normal map.
|
||||||
|
|
||||||
|

|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
'''
|
'''
|
||||||
Copyright (C) 2021 - 2024 Akaneyu
|
Copyright (C) 2021 - 2025 Akaneyu
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
This program is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -18,7 +18,7 @@
|
||||||
bl_info = {
|
bl_info = {
|
||||||
"name": "Image Editor Plus",
|
"name": "Image Editor Plus",
|
||||||
"author": "akaneyu",
|
"author": "akaneyu",
|
||||||
"version": (1, 9, 0),
|
"version": (1, 10, 0),
|
||||||
"blender": (3, 3, 0),
|
"blender": (3, 3, 0),
|
||||||
"location": "Image",
|
"location": "Image",
|
||||||
"warning": "",
|
"warning": "",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
'''
|
'''
|
||||||
Copyright (C) 2021 - 2024 Akaneyu
|
Copyright (C) 2021 - 2025 Akaneyu
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
This program is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -136,6 +136,7 @@ def draw_handler():
|
||||||
|
|
||||||
# release the selection if the image is changed
|
# release the selection if the image is changed
|
||||||
if area_session.selection or area_session.selection_region:
|
if area_session.selection or area_session.selection_region:
|
||||||
|
if area_session.prev_image:
|
||||||
if img != area_session.prev_image:
|
if img != area_session.prev_image:
|
||||||
cancel_selection(context)
|
cancel_selection(context)
|
||||||
|
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
'''
|
'''
|
||||||
Copyright (C) 2021 - 2024 Akaneyu
|
Copyright (C) 2021 - 2025 Akaneyu
|
||||||
|
|
||||||
This program is free software: you can redistribute it and/or modify
|
This program is free software: you can redistribute it and/or modify
|
||||||
it under the terms of the GNU General Public License as published by
|
it under the terms of the GNU General Public License as published by
|
||||||
|
@ -26,7 +26,9 @@ class IMAGE_EDITOR_PLUS_OT_make_selection(bpy.types.Operator):
|
||||||
bl_idname = "image_editor_plus.make_selection"
|
bl_idname = "image_editor_plus.make_selection"
|
||||||
bl_label = "Make Selection"
|
bl_label = "Make Selection"
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self, *args, **kwargs):
|
||||||
|
super().__init__(*args, **kwargs)
|
||||||
|
|
||||||
self.lmb = False
|
self.lmb = False
|
||||||
|
|
||||||
def modal(self, context, event):
|
def modal(self, context, event):
|
||||||
|
@ -43,12 +45,14 @@ class IMAGE_EDITOR_PLUS_OT_make_selection(bpy.types.Operator):
|
||||||
|
|
||||||
if area_session.selection_region:
|
if area_session.selection_region:
|
||||||
area_session.selection_region[1] = region_pos
|
area_session.selection_region[1] = region_pos
|
||||||
else:
|
|
||||||
area_session.selection_region = [region_pos, region_pos]
|
|
||||||
|
|
||||||
elif event.type == 'LEFTMOUSE':
|
elif event.type == 'LEFTMOUSE':
|
||||||
if event.value == 'PRESS':
|
if event.value == 'PRESS':
|
||||||
self.lmb = True
|
self.lmb = True
|
||||||
|
|
||||||
|
region_pos = [event.mouse_region_x, event.mouse_region_y]
|
||||||
|
area_session.selection_region = [region_pos, region_pos]
|
||||||
|
|
||||||
elif event.value == 'RELEASE':
|
elif event.value == 'RELEASE':
|
||||||
self.lmb = False
|
self.lmb = False
|
||||||
|
|
||||||
|
@ -397,7 +401,9 @@ class IMAGE_EDITOR_PLUS_OT_move_layer(bpy.types.Operator):
|
||||||
bl_idname = "image_editor_plus.move_layer"
|
bl_idname = "image_editor_plus.move_layer"
|
||||||
bl_label = "Move Layer"
|
bl_label = "Move Layer"
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self, *args, **kwargs):
|
||||||
|
super().__init__(*args, **kwargs)
|
||||||
|
|
||||||
self.start_input_position = [0, 0]
|
self.start_input_position = [0, 0]
|
||||||
self.start_layer_location = [0, 0]
|
self.start_layer_location = [0, 0]
|
||||||
|
|
||||||
|
@ -885,7 +891,9 @@ class IMAGE_EDITOR_PLUS_OT_rotate_layer_arbitrary(bpy.types.Operator):
|
||||||
bl_idname = "image_editor_plus.rotate_layer_arbitrary"
|
bl_idname = "image_editor_plus.rotate_layer_arbitrary"
|
||||||
bl_label = "Rotate Layer Arbitrary"
|
bl_label = "Rotate Layer Arbitrary"
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self, *args, **kwargs):
|
||||||
|
super().__init__(*args, **kwargs)
|
||||||
|
|
||||||
self.start_input_position = [0, 0]
|
self.start_input_position = [0, 0]
|
||||||
self.start_layer_angle = 0
|
self.start_layer_angle = 0
|
||||||
|
|
||||||
|
@ -967,7 +975,9 @@ class IMAGE_EDITOR_PLUS_OT_scale_layer(bpy.types.Operator):
|
||||||
bl_idname = "image_editor_plus.scale_layer"
|
bl_idname = "image_editor_plus.scale_layer"
|
||||||
bl_label = "Scale Layer"
|
bl_label = "Scale Layer"
|
||||||
|
|
||||||
def __init__(self):
|
def __init__(self, *args, **kwargs):
|
||||||
|
super().__init__(*args, **kwargs)
|
||||||
|
|
||||||
self.start_input_position = [0, 0]
|
self.start_input_position = [0, 0]
|
||||||
self.start_layer_scale_x = 1.0
|
self.start_layer_scale_x = 1.0
|
||||||
self.start_layer_scale_y = 1.0
|
self.start_layer_scale_y = 1.0
|
||||||
|
|
Binary file not shown.
After Width: | Height: | Size: 584 KiB |
Binary file not shown.
After Width: | Height: | Size: 464 KiB |
Binary file not shown.
After Width: | Height: | Size: 509 KiB |
Binary file not shown.
After Width: | Height: | Size: 482 KiB |
Binary file not shown.
After Width: | Height: | Size: 308 KiB |
Loading…
Reference in New Issue