fix: joker images stretch to fill body area equally for big/small
This commit is contained in:
@@ -331,7 +331,7 @@ def draw_joker(canvas, design, which, project, card_key, asset):
|
|||||||
offset_y = int(body_h * image_dy)
|
offset_y = int(body_h * image_dy)
|
||||||
|
|
||||||
img_copy = asset.copy()
|
img_copy = asset.copy()
|
||||||
img_copy.thumbnail((body_w, half_h), Image.LANCZOS)
|
img_copy = img_copy.resize((body_w, half_h), Image.LANCZOS)
|
||||||
if image_scale != 1:
|
if image_scale != 1:
|
||||||
sw = max(1, int(img_copy.width * image_scale))
|
sw = max(1, int(img_copy.width * image_scale))
|
||||||
sh = max(1, int(img_copy.height * image_scale))
|
sh = max(1, int(img_copy.height * image_scale))
|
||||||
|
|||||||
@@ -280,19 +280,11 @@ async function drawJokerBody(ctx, w, h, which, design, project) {
|
|||||||
|
|
||||||
if (img && img.complete && img.naturalWidth) {
|
if (img && img.complete && img.naturalWidth) {
|
||||||
const halfH = bodyH / 2
|
const halfH = bodyH / 2
|
||||||
const imgRatio = img.naturalWidth / img.naturalHeight
|
|
||||||
const target = bodyW / halfH
|
|
||||||
let drawW, drawH
|
|
||||||
if (imgRatio > target) {
|
|
||||||
drawW = bodyW; drawH = bodyW / imgRatio
|
|
||||||
} else {
|
|
||||||
drawH = halfH; drawW = halfH * imgRatio
|
|
||||||
}
|
|
||||||
const imageDx = Number(design.image_dx) || 0
|
const imageDx = Number(design.image_dx) || 0
|
||||||
const imageDy = Number(design.image_dy) || 0
|
const imageDy = Number(design.image_dy) || 0
|
||||||
const imageScale = Number(design.image_scale) || 1
|
const imageScale = Number(design.image_scale) || 1
|
||||||
const finalW = Math.max(1, drawW * imageScale)
|
const finalW = Math.max(1, bodyW * imageScale)
|
||||||
const finalH = Math.max(1, drawH * imageScale)
|
const finalH = Math.max(1, halfH * imageScale)
|
||||||
const offsetX = bodyW * imageDx
|
const offsetX = bodyW * imageDx
|
||||||
const offsetY = bodyH * imageDy
|
const offsetY = bodyH * imageDy
|
||||||
const topX = padX + offsetX + (bodyW - finalW) / 2
|
const topX = padX + offsetX + (bodyW - finalW) / 2
|
||||||
|
|||||||
Reference in New Issue
Block a user