Skip to content

Commit 5dd43b9

Browse files
committed
feat(overlay): support camelCase and snake_case for position properties in overlays
1 parent 5c9a08b commit 5dd43b9

File tree

2 files changed

+41
-3
lines changed

2 files changed

+41
-3
lines changed

src/imagekitio/lib/helper.py

Lines changed: 18 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -317,12 +317,12 @@ def _process_overlay(overlay: Overlay) -> str:
317317

318318
parsed_overlay.append(f"bg-{color}")
319319

320-
# Handle layer_mode property
321-
layer_mode = overlay.get("layer_mode")
320+
# Handle layerMode and layer_mode (both camelCase and snake_case)
321+
layer_mode = overlay.get("layerMode") or overlay.get("layer_mode")
322322
if layer_mode:
323323
parsed_overlay.append(f"lm-{layer_mode}")
324324

325-
# Handle position properties (x, y, focus)
325+
# Handle position properties (x, y, focus, x_center, y_center, anchor_point)
326326
# Node.js uses if (x) which skips falsy values like 0, '', false, null, undefined
327327
x = position.get("x")
328328
if x:
@@ -332,6 +332,21 @@ def _process_overlay(overlay: Overlay) -> str:
332332
if y:
333333
parsed_overlay.append(f"ly-{y}")
334334

335+
# Handle xCenter and x_center (both snake_case and camelCase)
336+
x_center = position.get("xCenter") or position.get("x_center")
337+
if x_center:
338+
parsed_overlay.append(f"lxc-{x_center}")
339+
340+
# Handle yCenter and y_center (both snake_case and camelCase)
341+
y_center = position.get("yCenter") or position.get("y_center")
342+
if y_center:
343+
parsed_overlay.append(f"lyc-{y_center}")
344+
345+
# Handle anchorPoint and anchor_point (both snake_case and camelCase)
346+
anchor_point = position.get("anchorPoint") or position.get("anchor_point")
347+
if anchor_point:
348+
parsed_overlay.append(f"lap-{anchor_point}")
349+
335350
focus = position.get("focus")
336351
if focus:
337352
parsed_overlay.append(f"lfo-{focus}")

tests/custom/url_generation/test_overlay.py

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -481,3 +481,26 @@ def test_should_handle_layer_mode_displace_in_overlay(self):
481481
expected = "https://ik.imagekit.io/test_url_endpoint/tr:l-image,i-overlay.png,lm-displace,l-end/base-image.jpg"
482482
assert url == expected
483483

484+
def test_should_handle_x_center_y_center_and_anchor_point_in_overlay_position(self):
485+
"""Test xCenter, yCenter and anchorPoint in overlay position."""
486+
url = self.client.helper.build_url(
487+
src="/base-image.jpg",
488+
url_endpoint="https://ik.imagekit.io/test_url_endpoint",
489+
transformation_position="path",
490+
transformation=[
491+
{
492+
"overlay": {
493+
"type": "text",
494+
"text": "Centered Text",
495+
"position": {
496+
"x_center": "bw_mul_0.5",
497+
"y_center": "bh_mul_0.5",
498+
"anchor_point": "top_left",
499+
},
500+
}
501+
}
502+
],
503+
)
504+
expected = "https://ik.imagekit.io/test_url_endpoint/tr:l-text,i-Centered%20Text,lxc-bw_mul_0.5,lyc-bh_mul_0.5,lap-top_left,l-end/base-image.jpg"
505+
assert url == expected
506+

0 commit comments

Comments
 (0)