|
|
@@ -14,7 +14,11 @@ class PosterUtil
|
|
|
|
|
|
const POSTER_W = 750;
|
|
|
|
|
|
- const SLOT_W = 700;
|
|
|
+ /** 画布左右留白(各 20px) */
|
|
|
+ const CANVAS_PAD_X = 20;
|
|
|
+
|
|
|
+ /** 商品图显示宽度 = POSTER_W - 2×CANVAS_PAD_X */
|
|
|
+ const SLOT_W = 710;
|
|
|
|
|
|
/** 底部价格/标题/太阳码固定区 */
|
|
|
const FOOTER_H = 360;
|
|
|
@@ -68,8 +72,8 @@ class PosterUtil
|
|
|
$scaledH = (int)round($coverHeight * (self::SLOT_W / $coverWidth));
|
|
|
$imgH = max(self::IMG_H_MIN, min(self::IMG_H_MAX, $scaledH));
|
|
|
} else {
|
|
|
+ $scaledH = self::IMG_H_MIN;
|
|
|
$imgH = self::IMG_H_MIN;
|
|
|
- $scaledH = $imgH;
|
|
|
}
|
|
|
|
|
|
$totalH = $imgH + self::FOOTER_H;
|
|
|
@@ -85,19 +89,16 @@ class PosterUtil
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
- * 短图/扁图:lfit 后 pad;长图:m_fill 裁切进槽位
|
|
|
+ * 商品图:常规按宽 SLOT_W 等比(无左右垫白);超高图用 m_fill 裁高至 IMG_H_MAX
|
|
|
*/
|
|
|
- private static function buildCoverWatermarkPath($cover, $imgH, $scaledH, $coverWidth, $coverHeight)
|
|
|
+ private static function buildCoverWatermarkPath($cover, $scaledH)
|
|
|
{
|
|
|
- $wide = $coverWidth > 0 && $coverHeight > 0 && ($coverWidth / $coverHeight) > 1.15;
|
|
|
- $shortSlot = $scaledH > 0 && ($scaledH < $imgH || $wide);
|
|
|
-
|
|
|
- if ($shortSlot) {
|
|
|
- return $cover . '?x-oss-process=image/resize,m_lfit,h_' . $imgH . ',w_' . self::SLOT_W . ',limit_0'
|
|
|
- . '/resize,m_pad,h_' . $imgH . ',w_' . self::SLOT_W . ',color_' . self::CANVAS_COLOR;
|
|
|
+ $scaledH = (int)$scaledH;
|
|
|
+ if ($scaledH > self::IMG_H_MAX) {
|
|
|
+ return $cover . '?x-oss-process=image/resize,m_fill,w_' . self::SLOT_W . ',h_' . self::IMG_H_MAX . ',limit_0';
|
|
|
}
|
|
|
|
|
|
- return $cover . '?x-oss-process=image/resize,m_fill,h_' . $imgH . ',w_' . self::SLOT_W;
|
|
|
+ return $cover . '?x-oss-process=image/resize,m_lfit,w_' . self::SLOT_W . ',limit_0';
|
|
|
}
|
|
|
|
|
|
/**
|
|
|
@@ -198,7 +199,6 @@ class PosterUtil
|
|
|
$layout = self::calcPosterLayout($coverW, $coverH);
|
|
|
$imgH = $layout['imgH'];
|
|
|
$totalH = $layout['totalH'];
|
|
|
- $scaledH = $layout['scaledH'];
|
|
|
|
|
|
$displayName = self::truncateText($name, 14);
|
|
|
if ($flowerNum > 0 && $displayName !== '') {
|
|
|
@@ -207,11 +207,12 @@ class PosterUtil
|
|
|
$displayName .= ' · ' . self::truncateText($subtitle, 8);
|
|
|
}
|
|
|
|
|
|
- $coverWatermark = self::buildCoverWatermarkPath($cover, $imgH, $scaledH, $coverW, $coverH);
|
|
|
+ $coverWatermark = self::buildCoverWatermarkPath($cover, $layout['scaledH']);
|
|
|
$qrWatermark = $miniCode . '?x-oss-process=image/resize,m_fill,h_' . self::QR_SIZE . ',w_' . self::QR_SIZE;
|
|
|
|
|
|
$url = self::buildCanvasBaseUrl($prefix, $totalH);
|
|
|
- $url .= '/watermark,image_' . stringUtil::ossBase64($coverWatermark) . ',g_north,x_25,y_8';
|
|
|
+ $url .= '/watermark,image_' . stringUtil::ossBase64($coverWatermark)
|
|
|
+ . ',g_nw,x_' . self::CANVAS_PAD_X . ',y_8';
|
|
|
$url .= '/watermark,image_' . stringUtil::ossBase64($qrWatermark) . ',g_se,x_' . self::QR_PAD_RIGHT . ',y_' . self::QR_PAD_BOTTOM;
|
|
|
|
|
|
$logoB64 = self::buildHyxhLogoWatermark($mainId);
|
|
|
@@ -219,9 +220,12 @@ class PosterUtil
|
|
|
$url .= '/watermark,image_' . $logoB64 . ',g_se,x_210,y_48';
|
|
|
}
|
|
|
|
|
|
- $url .= '/watermark,text_' . stringUtil::ossBase64($priceText) . ',g_sw,x_24,y_32,color_EE2C2C,type_' . self::FONT . ',size_56';
|
|
|
- $url .= '/watermark,text_' . stringUtil::ossBase64($displayName) . ',g_sw,x_24,y_102,color_333333,type_' . self::FONT . ',size_36';
|
|
|
- $url .= '/watermark,text_' . stringUtil::ossBase64($staffText) . ',g_sw,x_24,y_148,color_999999,type_' . self::FONT . ',size_26';
|
|
|
+ $url .= '/watermark,text_' . stringUtil::ossBase64($priceText)
|
|
|
+ . ',g_sw,x_' . self::CANVAS_PAD_X . ',y_32,color_EE2C2C,type_' . self::FONT . ',size_56';
|
|
|
+ $url .= '/watermark,text_' . stringUtil::ossBase64($displayName)
|
|
|
+ . ',g_sw,x_' . self::CANVAS_PAD_X . ',y_102,color_333333,type_' . self::FONT . ',size_36';
|
|
|
+ $url .= '/watermark,text_' . stringUtil::ossBase64($staffText)
|
|
|
+ . ',g_sw,x_' . self::CANVAS_PAD_X . ',y_148,color_999999,type_' . self::FONT . ',size_26';
|
|
|
$url .= '/watermark,text_' . stringUtil::ossBase64($scanHint)
|
|
|
. ',g_south,x_' . self::qrCenterX() . ',y_' . self::scanHintYFromBottom()
|
|
|
. ',color_888888,type_' . self::FONT . ',size_24';
|