BrushCue Example: Camera Moving Distortion¶

Open In Colab

You can use this tool online at https://www.brushcue.com/tools/camera-moving-distortion

In [ ]:
!pip install brushcue
In [1]:
import brushcue
from PIL import Image
import io

input_image_1 = brushcue.composition_monet_women_with_parasol() # insert your own image here
float_constant_2 = brushcue.float_constant(1.0)
float_constant_3 = brushcue.float_constant(0.0)
float_constant_4 = brushcue.float_constant(0.0)
float_constant_5 = brushcue.float_constant(0.0)
float_constant_6 = brushcue.float_constant(0.0)
float_constant_7 = brushcue.float_constant(1.0)
float_constant_8 = brushcue.float_constant(0.0)
float_constant_9 = brushcue.float_constant(0.0)
float_constant_10 = brushcue.float_constant(0.0)
float_constant_11 = brushcue.float_constant(0.0)
float_constant_12 = brushcue.float_constant(1.0)
float_constant_13 = brushcue.float_constant(0.0)
float_constant_14 = brushcue.float_constant(0.0)
float_constant_15 = brushcue.float_constant(0.0)
float_constant_16 = brushcue.float_constant(0.0)
transform_2d_identity_17 = brushcue.transform2_identity()
float_constant_18 = brushcue.float_constant(0.30000001192092896)
transform_2d_identity_19 = brushcue.transform2_identity()
float_constant_20 = brushcue.float_constant(0.0)
float_constant_21 = brushcue.float_constant(0.0)
int_constant_22 = brushcue.int_constant(0)
int_constant_23 = brushcue.int_constant(0)
float_constant_24 = brushcue.float_constant(21.0)
float_constant_25 = brushcue.float_constant(46.0)
composition_size_26 = brushcue.composition_size(input_image_1)
int_constant_27 = brushcue.int_constant(-1)
int_constant_28 = brushcue.int_constant(-1)
float_constant_29 = brushcue.float_constant(39.0)
float_constant_30 = brushcue.float_constant(-20.0)
second_image_offset_31 = brushcue.vector2f_constant(-60, 19.9571)
first_image_offset_32 = brushcue.vector2f_constant(40, 60)
overlay_alpha_33 = brushcue.float_passthrough(float_constant_18)
vector_2_float_from_components_34 = brushcue.vector2f_from_components(float_constant_24, float_constant_25)
composition_width_35 = brushcue.vector2i_x(composition_size_26)
composition_height_36 = brushcue.vector2i_y(composition_size_26)
vector_2_float_from_components_37 = brushcue.vector2f_from_components(float_constant_29, float_constant_30)
vector_2_float_get_x_38 = brushcue.vector2f_x(second_image_offset_31)
vector_2_float_get_x_39 = brushcue.vector2f_x(first_image_offset_32)
vector_2_float_get_y_40 = brushcue.vector2f_y(first_image_offset_32)
vector_2_float_get_y_41 = brushcue.vector2f_y(second_image_offset_31)
min_x_offset_42 = brushcue.float_min(vector_2_float_get_x_39, vector_2_float_get_x_38)
min_y_offset_43 = brushcue.float_min(vector_2_float_get_y_40, vector_2_float_get_y_41)
alpha_transform_44 = brushcue.composition_linear_transform(input_image_1, float_constant_2, float_constant_3, float_constant_4, float_constant_5, float_constant_6, float_constant_7, float_constant_8, float_constant_9, float_constant_10, float_constant_11, float_constant_12, float_constant_13, float_constant_14, float_constant_15, float_constant_16, overlay_alpha_33)
second_offset_45 = brushcue.vector2f_passthrough(vector_2_float_from_components_34)
first_offset_46 = brushcue.vector2f_passthrough(vector_2_float_from_components_37)
max_x_offset_47 = brushcue.float_max(vector_2_float_get_x_38, vector_2_float_get_x_39)
max_y_offset_48 = brushcue.float_max(vector_2_float_get_y_40, vector_2_float_get_y_41)
float_round_to_int_49 = brushcue.float_round_to_int(min_x_offset_42)
float_round_to_int_50 = brushcue.float_round_to_int(min_y_offset_43)
transform_2d_translation_51 = brushcue.transform2_translation(transform_2d_identity_17, second_offset_45)
transform_2d_translation_52 = brushcue.transform2_translation(transform_2d_identity_19, first_offset_46)
float_x_offset_53 = brushcue.float_max(max_x_offset_47, float_constant_20)
float_max_54 = brushcue.float_max(float_constant_21, max_y_offset_48)
x_offset_right_55 = brushcue.int_multiply(float_round_to_int_49, int_constant_27)
int_multiply_56 = brushcue.int_multiply(float_round_to_int_50, int_constant_28)
first_blend_57 = brushcue.composition_blend_alpha(alpha_transform_44, input_image_1, transform_2d_translation_52)
x_offset_left_to_int_58 = brushcue.float_round_to_int(float_x_offset_53)
y_offset_top_to_int_59 = brushcue.float_round_to_int(float_max_54)
int_subtract_60 = brushcue.int_subtract(composition_width_35, x_offset_left_to_int_58)
int_max_61 = brushcue.int_max(x_offset_right_55, int_constant_22)
int_subtract_62 = brushcue.int_subtract(composition_height_36, y_offset_top_to_int_59)
int_max_63 = brushcue.int_max(int_multiply_56, int_constant_23)
second_blend_64 = brushcue.composition_blend_alpha(alpha_transform_44, first_blend_57, transform_2d_translation_51)
int_subtract_65 = brushcue.int_subtract(int_subtract_60, int_max_61)
int_subtract_66 = brushcue.int_subtract(int_subtract_62, int_max_63)
bounds_2d_int_from_x_y_width_height_67 = brushcue.bounds2i_from_x_y_width_height(x_offset_left_to_int_58, y_offset_top_to_int_59, int_subtract_65, int_subtract_66)
cropped_output_68 = brushcue.composition_crop(second_blend_64, bounds_2d_int_from_x_y_width_height_67)

ctx = brushcue.Context()
result = cropped_output_68.execute(ctx)
composition = result.as_composition()
data_bytes = composition.to_image_bytes(ctx)
img = Image.open(io.BytesIO(data_bytes))
img.thumbnail((400, 400)) # remove this line for full resolution
img
Out[1]:
No description has been provided for this image