-
Notifications
You must be signed in to change notification settings - Fork 33
Helper
高超 edited this page Feb 26, 2019
·
1 revision
Image edit is an android library based on opengl es 2.0.
All editing action are performed by Operator.
Only two steps to edit image:
- create an operator.
- add to IEManager api class.
- create an operator
filterOp = new LookupFilterOperator.Builder()
.intensity(mCurFilter.mAdjust[0])
.lookup(BitmapFactory.decodeStream(LOOK_UP_TABLE_STREAM)
.build();
- add to IEManager api class
if (opAdded) {
// you can render it right now.
IEManager.getInstance().updateOperator(0, filterOp, true);
// or render it later.
IEManager.getInstance().updateOperator(0, filterOp, false);
} else {
IEManager.getInstance().addOperator(0, filterOp, true);
}
We take exposure adjustment as an example.
- create an operator
exposureOp = new ExposureAdjustOperator.Builder().build();
// adjust params in operator.
exposureOp.setExposure(EXPOSURE_VALUE);
- add it to IEManager api class.
if (opAdded) {
// you can render it right now.
IEManager.getInstance().updateOperator(0, exposureOp, true);
// or render it later.
IEManager.getInstance().updateOperator(0, exposureOp, false);
} else {
IEManager.getInstance().addOperator(0, exposureOp, true);
}
We support following adjustment:
- Brightness
- Exposure
- Gamma
- Contrast
- Saturation
- Sharpness
- Dark corner
- Shadow & Highlight
- Color temperature
- Tone
- De-noise
- RGB value
- Color balance
Just set a scissor rectangle:
// render it right later.
IEManager.getInstance().setScissorX(0, SCISSOR_X, false);
// render it right later.
IEManager.getInstance().setScissorY(0, SCISSOR_Y, false);
// render it right later.
IEManager.getInstance().setScissorWidth(0, SCISSOR_WIDTH, false);
// render it right now.
IEManager.getInstance().setScissorHeight(0, SCISSOR_HEIGHT, true);
- create an operator
transOp = new ModelViewOperator.Builder().build();
// set perspective
transOp.setPerspective(true);
// set rotate
transOp.setRotateX(degree);
transOp.setRotateY(degree);
transOp.setRotateZ(degree);
// set translate
transOp.setTranslateX(translate);
transOp.setTranslateY(translate);
transOp.setTranslateZ(translate);
- add it to IEManager
if (opAdded) {
// you can render it right now.
IEManager.getInstance().updateOperator(0, transOp, true);
// or render it later.
IEManager.getInstance().updateOperator(0, transOp, false);
} else {
IEManager.getInstance().addOperator(0, transOp, true);
}
- create text operator
textOp = new TextOperator.Builder()
.text(text)
.color(1f, 1f, 1f)
.size(DEFAULT_TEXT_SIZE)
.font(FONT_FILE)
.position(mCurTextPosX, mCurTextPosY)
.build();
- add it to IEManager
if (opAdded) {
// you can render it right now.
IEManager.getInstance().updateOperator(0, textOp, true);
// or render it later.
IEManager.getInstance().updateOperator(0, textOp, false);
} else {
IEManager.getInstance().addOperator(0, textOp, true);
}
- create an operator
// we can use 3 x 3/ 5 x5 sample operator to blur, and choose a good kernel.
blurOp = new ThreeXThreeSampleOperator.Builder()
.sampleKernel(ThreeXThreeSampleOperator.SIGMA_1_5_GAUSSIAN_SAMPLE_KERNEL)
.build();
- add it to IEManager
if (opAdded) {
// you can render it right now.
IEManager.getInstance().updateOperator(0, blurOp, true);
// or render it later.
IEManager.getInstance().updateOperator(0, blurOp, false);
} else {
IEManager.getInstance().addOperator(0, blurOp, true);
}
- create an operator
stickerOp = new StickerOperator.Builder()
.sticker(STICKER_BITMAP)
.position(0.5f, 0.5f)
.build();
- add it to IEManager
if (opAdded) {
// you can render it right now.
IEManager.getInstance().updateOperator(0, stickerOp, true);
// or render it later.
IEManager.getInstance().updateOperator(0, stickerOp, false);
} else {
IEManager.getInstance().addOperator(0, stickerOp, true);
}
- create an operator
mosaicOp = new MosaicOperator.Builder()
.strength(STRENGTH_VALUE)
.build();
// add mosaic area
mosaicOp.addArea(CENTER_X, CENTER_Y);
// remove mosaic area
mosaicOp.removeArea(CENTER_X, CENTER_Y);
- add it to IEManager
if (opAdded) {
// you can render it right now.
IEManager.getInstance().updateOperator(0, mosaicOp, true);
// or render it later.
IEManager.getInstance().updateOperator(0, mosaicOp, false);
} else {
IEManager.getInstance().addOperator(0, mosaicOp, true);
}
You can generate video from images, and add BGM!
- add images to IEManager as clip.
for (int i = 0; i < NUMBER_OF_IMAGE_FILES; i++) {
// add this image, and it's shown duration is 3000 ms.
IEManager.getInstance().addClip(IMAGE_FILE_PATH, 3000);
mTotalDuration += 3000;
}
- you can add transition between clips.
IEManager.getInstance().setTransition(CLIP_INDEX, TRANSITION, TRANSITION_DURATION, RENDER_RIGHT_NOW);
- seek to see effects.
IEManager.getInstance().seek((long) (IEManager.getInstance().getTotalDuration() * PROGRESS));
- save as video file.
IEManager.getInstance().saveAsVideo(
VIDEO_WIDTH,
VIDEO_HEIGHT,
ORIENTATION,
OUTPUT_MP4_FILE,
BGM_FILE_PATH,
BGM_START_TIME,
new SaveListener() {
@Override
public void onSaveFailed() {
// save failed.
}
@Override
public void onSaveProgress(float progress) {
// notify save progress.
}
@Override
public void onSaved(File target) {
// video save done.
}
}
);