Compare commits
No commits in common. "main" and "v1.9.0" have entirely different histories.
56
README.md
56
README.md
|
@ -1,57 +1,3 @@
|
||||||
# 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 - 2025 Akaneyu
|
Copyright (C) 2021 - 2024 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, 10, 0),
|
"version": (1, 9, 0),
|
||||||
"blender": (3, 3, 0),
|
"blender": (3, 3, 0),
|
||||||
"location": "Image",
|
"location": "Image",
|
||||||
"warning": "",
|
"warning": "",
|
||||||
|
|
|
@ -1,5 +1,5 @@
|
||||||
'''
|
'''
|
||||||
Copyright (C) 2021 - 2025 Akaneyu
|
Copyright (C) 2021 - 2024 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,7 +136,6 @@ 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 - 2025 Akaneyu
|
Copyright (C) 2021 - 2024 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,9 +26,7 @@ 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, *args, **kwargs):
|
def __init__(self):
|
||||||
super().__init__(*args, **kwargs)
|
|
||||||
|
|
||||||
self.lmb = False
|
self.lmb = False
|
||||||
|
|
||||||
def modal(self, context, event):
|
def modal(self, context, event):
|
||||||
|
@ -45,14 +43,12 @@ 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
|
||||||
|
|
||||||
|
@ -401,9 +397,7 @@ 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, *args, **kwargs):
|
def __init__(self):
|
||||||
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]
|
||||||
|
|
||||||
|
@ -891,9 +885,7 @@ 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, *args, **kwargs):
|
def __init__(self):
|
||||||
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
|
||||||
|
|
||||||
|
@ -975,9 +967,7 @@ 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, *args, **kwargs):
|
def __init__(self):
|
||||||
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.
Before Width: | Height: | Size: 584 KiB |
Binary file not shown.
Before Width: | Height: | Size: 464 KiB |
Binary file not shown.
Before Width: | Height: | Size: 509 KiB |
Binary file not shown.
Before Width: | Height: | Size: 482 KiB |
Binary file not shown.
Before Width: | Height: | Size: 308 KiB |
Loading…
Reference in New Issue