Spaces:
Running
Running
TheEeeeLin
commited on
Commit
·
ec5a4d3
1
Parent(s):
ff0f164
update
Browse files- demo/assets/title.md +5 -5
- demo/kb_output/.gitkeep +0 -0
- demo/locales.py +9 -5
- demo/processor.py +84 -59
- demo/ui.py +1 -0
- hivision/creator/layout_calculator.py +6 -8
demo/assets/title.md
CHANGED
@@ -4,10 +4,10 @@
|
|
4 |
<b style="color: #6e9abb;">HivisionIDPhotos</b><span style="font-size: 18px; color: #638fb3; margin-left: 10px;"> v1.2.8</span>
|
5 |
</div>
|
6 |
<div style="display: flex; justify-content: center; align-items: center; text-align: center;">
|
7 |
-
<a href="https://github.com/xiaolin199912/HivisionIDPhotos"><img alt="Github" src="https://img.shields.io/static/v1?label=GitHub&message=GitHub&color=black"></a>  
|
8 |
-
<a href="https://docs.qq.com/doc/DUkpBdk90eWZFS2JW" target="_blank"><img alt="Static Badge" src="https://img.shields.io/badge/WeChat-微信-4cb55e"></a>  
|
9 |
-
<a href="https://github.com/xiaolin199912/HivisionIDPhotos/stargazers"><img alt="GitHub stars" src="https://img.shields.io/github/stars/zeyi-lin/hivisionidphotos?color=ffcb47&labelColor=black&style=flat-square"></a>  
|
10 |
-
<a href="https://swanlab.cn?utm_source=hivision_demo"><img alt="SwanLab" src="https://img.shields.io/badge/Training%20by-SwanLab-4cb55e"></a>  
|
11 |
-
<a href="https://github.com/Zeyi-Lin/HivisionIDPhotos/blob/master/docs/api_CN.md" target="_blank"><img alt="Static Badge" src="https://img.shields.io/badge/API_Docs-API文档-315bce"></a>
|
12 |
</div>
|
13 |
</div>
|
|
|
4 |
<b style="color: #6e9abb;">HivisionIDPhotos</b><span style="font-size: 18px; color: #638fb3; margin-left: 10px;"> v1.2.8</span>
|
5 |
</div>
|
6 |
<div style="display: flex; justify-content: center; align-items: center; text-align: center;">
|
7 |
+
<a href="https://github.com/xiaolin199912/HivisionIDPhotos"><img alt="Github" src="https://img.shields.io/static/v1?label=GitHub&message=GitHub&color=black" onerror="this.style.display='none';"></a>  
|
8 |
+
<a href="https://docs.qq.com/doc/DUkpBdk90eWZFS2JW" target="_blank"><img alt="Static Badge" src="https://img.shields.io/badge/WeChat-微信-4cb55e" onerror="this.style.display='none';"></a>  
|
9 |
+
<a href="https://github.com/xiaolin199912/HivisionIDPhotos/stargazers"><img alt="GitHub stars" src="https://img.shields.io/github/stars/zeyi-lin/hivisionidphotos?color=ffcb47&labelColor=black&style=flat-square" onerror="this.style.display='none';"></a>  
|
10 |
+
<a href="https://swanlab.cn?utm_source=hivision_demo"><img alt="SwanLab" src="https://img.shields.io/badge/Training%20by-SwanLab-4cb55e" onerror="this.style.display='none';"></a>  
|
11 |
+
<a href="https://github.com/Zeyi-Lin/HivisionIDPhotos/blob/master/docs/api_CN.md" target="_blank"><img alt="Static Badge" src="https://img.shields.io/badge/API_Docs-API文档-315bce" onerror="this.style.display='none';"></a>
|
12 |
</div>
|
13 |
</div>
|
demo/kb_output/.gitkeep
DELETED
File without changes
|
demo/locales.py
CHANGED
@@ -546,7 +546,7 @@ LOCALES = {
|
|
546 |
"label": "Layout photo",
|
547 |
},
|
548 |
"zh": {
|
549 |
-
"label": "
|
550 |
},
|
551 |
"ja": {
|
552 |
"label": "レイアウト写真",
|
@@ -670,19 +670,23 @@ LOCALES = {
|
|
670 |
"plugin": {
|
671 |
"en": {
|
672 |
"label": "🤖Plugin",
|
673 |
-
"choices": ["Face Alignment", "Layout Photo Crop Line"],
|
|
|
674 |
},
|
675 |
"zh": {
|
676 |
"label": "🤖插件",
|
677 |
-
"choices": ["人脸旋转对齐", "排版照裁剪线"],
|
|
|
678 |
},
|
679 |
"ja": {
|
680 |
"label": "🤖プラグイン",
|
681 |
-
"choices": ["顔の整列", "レイアウト写真の切り取り線"],
|
|
|
682 |
},
|
683 |
"ko": {
|
684 |
"label": "🤖플러그인",
|
685 |
-
"choices": ["얼굴 정렬", "레이아웃 사진 자르기 선"],
|
|
|
686 |
},
|
687 |
},
|
688 |
"template_photo": {
|
|
|
546 |
"label": "Layout photo",
|
547 |
},
|
548 |
"zh": {
|
549 |
+
"label": "排版照",
|
550 |
},
|
551 |
"ja": {
|
552 |
"label": "レイアウト写真",
|
|
|
670 |
"plugin": {
|
671 |
"en": {
|
672 |
"label": "🤖Plugin",
|
673 |
+
"choices": ["Face Alignment", "Layout Photo Crop Line", "JPEG Format", "Five Inch Paper"],
|
674 |
+
"value": ["Layout Photo Crop Line"]
|
675 |
},
|
676 |
"zh": {
|
677 |
"label": "🤖插件",
|
678 |
+
"choices": ["人脸旋转对齐", "排版照裁剪线", "JPEG格式", "五寸相纸"],
|
679 |
+
"value": ["排版照裁剪线"]
|
680 |
},
|
681 |
"ja": {
|
682 |
"label": "🤖プラグイン",
|
683 |
+
"choices": ["顔の整列", "レイアウト写真の切り取り線", "JPEGフォーマット", "五寸相紙"],
|
684 |
+
"value": ["レイアウト写真の切り取り線"]
|
685 |
},
|
686 |
"ko": {
|
687 |
"label": "🤖플러그인",
|
688 |
+
"choices": ["얼굴 정렬", "레이아웃 사진 자르기 선", "JPEG 포맷", "오렌지 사진"],
|
689 |
+
"value": ["레이아웃 사진 자르기 선"]
|
690 |
},
|
691 |
},
|
692 |
"template_photo": {
|
demo/processor.py
CHANGED
@@ -70,17 +70,29 @@ class IDPhotoProcessor:
|
|
70 |
render_option
|
71 |
)
|
72 |
# 读取插件选项
|
|
|
73 |
if LOCALES["plugin"][language]["choices"][0] in plugin_option:
|
74 |
face_alignment_option = True
|
75 |
else:
|
76 |
face_alignment_option = False
|
|
|
77 |
if LOCALES["plugin"][language]["choices"][1] in plugin_option:
|
78 |
layout_photo_crop_line_option = True
|
79 |
else:
|
80 |
layout_photo_crop_line_option = False
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
81 |
|
82 |
idphoto_json = self._initialize_idphoto_json(
|
83 |
-
mode_option, color_option, render_option_index, image_kb_options, layout_photo_crop_line_option
|
84 |
)
|
85 |
|
86 |
# 处理尺寸模式
|
@@ -164,6 +176,8 @@ class IDPhotoProcessor:
|
|
164 |
render_option,
|
165 |
image_kb_options,
|
166 |
layout_photo_crop_line_option,
|
|
|
|
|
167 |
):
|
168 |
"""初始化idphoto_json字典"""
|
169 |
return {
|
@@ -174,6 +188,8 @@ class IDPhotoProcessor:
|
|
174 |
"custom_image_kb": None,
|
175 |
"custom_image_dpi": None,
|
176 |
"layout_photo_crop_line_option": layout_photo_crop_line_option,
|
|
|
|
|
177 |
}
|
178 |
|
179 |
# 处理尺寸模式
|
@@ -362,45 +378,27 @@ class IDPhotoProcessor:
|
|
362 |
)
|
363 |
|
364 |
# 调整图片大小
|
365 |
-
output_image_path_dict = self.
|
366 |
result_image_standard,
|
367 |
result_image_hd,
|
368 |
result_image_layout,
|
369 |
idphoto_json,
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
370 |
)
|
371 |
-
|
372 |
-
# 如果output_image_path_dict为None,即没有设置KB和DPI
|
373 |
-
if output_image_path_dict is None:
|
374 |
-
return self._create_response(
|
375 |
-
result_image_standard,
|
376 |
-
result_image_hd,
|
377 |
-
result_image_standard_png,
|
378 |
-
result_image_hd_png,
|
379 |
-
gr.update(value=result_image_layout, visible=result_image_layout_visible),
|
380 |
-
gr.update(value=result_image_template, visible=result_image_template_visible),
|
381 |
-
gr.update(visible = result_image_template_visible),
|
382 |
-
)
|
383 |
-
# 如果output_image_path_dict不为None,即设置了KB和DPI
|
384 |
-
else:
|
385 |
-
if output_image_path_dict["layout"]["processed"]:
|
386 |
-
result_image_layout = output_image_path_dict["layout"]["path"]
|
387 |
-
return self._create_response(
|
388 |
-
(
|
389 |
-
output_image_path_dict["standard"]["path"]
|
390 |
-
if output_image_path_dict["standard"]["processed"]
|
391 |
-
else result_image_standard
|
392 |
-
),
|
393 |
-
(
|
394 |
-
output_image_path_dict["hd"]["path"]
|
395 |
-
if output_image_path_dict["hd"]["processed"]
|
396 |
-
else result_image_hd
|
397 |
-
),
|
398 |
-
result_image_standard_png,
|
399 |
-
result_image_hd_png,
|
400 |
-
gr.update(value=result_image_layout, visible=result_image_layout_visible),
|
401 |
-
gr.update(value=result_image_template, visible=result_image_template_visible),
|
402 |
-
gr.update(visible = result_image_template_visible),
|
403 |
-
)
|
404 |
|
405 |
# 渲染背景
|
406 |
def _render_background(self, result_image_standard, result_image_hd, idphoto_json, language):
|
@@ -450,6 +448,8 @@ class IDPhotoProcessor:
|
|
450 |
typography_arr, typography_rotate = generate_layout_array(
|
451 |
input_height=idphoto_json["size"][0],
|
452 |
input_width=idphoto_json["size"][1],
|
|
|
|
|
453 |
)
|
454 |
|
455 |
result_image_layout = generate_layout_image(
|
@@ -459,6 +459,8 @@ class IDPhotoProcessor:
|
|
459 |
height=idphoto_json["size"][0],
|
460 |
width=idphoto_json["size"][1],
|
461 |
crop_line=idphoto_json["layout_photo_crop_line_option"],
|
|
|
|
|
462 |
)
|
463 |
|
464 |
return result_image_layout, True
|
@@ -512,7 +514,7 @@ class IDPhotoProcessor:
|
|
512 |
result_image_hd = add_watermark(image=result_image_hd, **watermark_params)
|
513 |
return result_image_standard, result_image_hd
|
514 |
|
515 |
-
def
|
516 |
self,
|
517 |
result_image_standard,
|
518 |
result_image_hd,
|
@@ -520,11 +522,9 @@ class IDPhotoProcessor:
|
|
520 |
idphoto_json,
|
521 |
format="png",
|
522 |
):
|
523 |
-
|
524 |
-
|
525 |
-
base_path =
|
526 |
-
os.path.dirname(os.path.dirname(__file__)), "demo/kb_output"
|
527 |
-
)
|
528 |
timestamp = int(time.time())
|
529 |
output_paths = {
|
530 |
"standard": {
|
@@ -556,53 +556,78 @@ class IDPhotoProcessor:
|
|
556 |
custom_kb,
|
557 |
dpi=custom_dpi,
|
558 |
)
|
559 |
-
output_paths["standard"]["processed"] = True
|
560 |
# 保存高清图像和排版图像
|
561 |
save_image_dpi_to_bytes(
|
562 |
result_image_hd, output_paths["hd"]["path"], dpi=custom_dpi
|
563 |
)
|
564 |
-
output_paths["hd"]["processed"] = True
|
565 |
if result_image_layout is not None:
|
566 |
save_image_dpi_to_bytes(
|
567 |
result_image_layout, output_paths["layout"]["path"], dpi=custom_dpi
|
568 |
)
|
569 |
-
output_paths["layout"]["processed"] = True
|
570 |
|
571 |
return output_paths
|
572 |
|
573 |
# 只有自定义DPI的情况
|
574 |
elif custom_dpi:
|
575 |
for key in output_paths:
|
576 |
-
output_paths[key]["path"] += f"_{custom_dpi}dpi.{format}"
|
577 |
# 保存所有图像,使用自定义DPI
|
|
|
578 |
if key == "layout" and result_image_layout is None:
|
579 |
-
|
580 |
-
|
581 |
-
|
582 |
-
|
583 |
-
|
584 |
-
|
585 |
-
|
586 |
-
output_paths[key]["processed"] = True
|
587 |
|
588 |
return output_paths
|
589 |
|
590 |
# 只有自定义KB的情况
|
591 |
elif custom_kb:
|
592 |
output_paths["standard"]["path"] += f"_{custom_kb}kb.{format}"
|
593 |
-
|
|
|
|
|
|
|
|
|
594 |
resize_image_to_kb(
|
595 |
result_image_standard,
|
596 |
output_paths["standard"]["path"],
|
597 |
custom_kb,
|
598 |
dpi=300,
|
599 |
)
|
600 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
601 |
|
602 |
return output_paths
|
603 |
-
|
604 |
-
|
605 |
-
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
606 |
|
607 |
def _create_response(
|
608 |
self,
|
@@ -613,7 +638,7 @@ class IDPhotoProcessor:
|
|
613 |
result_layout_image_gr,
|
614 |
result_image_template_gr,
|
615 |
result_image_template_accordion_gr,
|
616 |
-
):
|
617 |
"""创建响应"""
|
618 |
response = [
|
619 |
result_image_standard,
|
|
|
70 |
render_option
|
71 |
)
|
72 |
# 读取插件选项
|
73 |
+
# 人脸对齐选项
|
74 |
if LOCALES["plugin"][language]["choices"][0] in plugin_option:
|
75 |
face_alignment_option = True
|
76 |
else:
|
77 |
face_alignment_option = False
|
78 |
+
# 排版裁剪线选项
|
79 |
if LOCALES["plugin"][language]["choices"][1] in plugin_option:
|
80 |
layout_photo_crop_line_option = True
|
81 |
else:
|
82 |
layout_photo_crop_line_option = False
|
83 |
+
# JPEG格式选项
|
84 |
+
if LOCALES["plugin"][language]["choices"][2] in plugin_option:
|
85 |
+
jpeg_format_option = True
|
86 |
+
else:
|
87 |
+
jpeg_format_option = False
|
88 |
+
# 五寸相纸选项
|
89 |
+
if LOCALES["plugin"][language]["choices"][3] in plugin_option:
|
90 |
+
five_inch_option = True
|
91 |
+
else:
|
92 |
+
five_inch_option = False
|
93 |
|
94 |
idphoto_json = self._initialize_idphoto_json(
|
95 |
+
mode_option, color_option, render_option_index, image_kb_options, layout_photo_crop_line_option, jpeg_format_option, five_inch_option
|
96 |
)
|
97 |
|
98 |
# 处理尺寸模式
|
|
|
176 |
render_option,
|
177 |
image_kb_options,
|
178 |
layout_photo_crop_line_option,
|
179 |
+
jpeg_format_option,
|
180 |
+
five_inch_option,
|
181 |
):
|
182 |
"""初始化idphoto_json字典"""
|
183 |
return {
|
|
|
188 |
"custom_image_kb": None,
|
189 |
"custom_image_dpi": None,
|
190 |
"layout_photo_crop_line_option": layout_photo_crop_line_option,
|
191 |
+
"jpeg_format_option": jpeg_format_option,
|
192 |
+
"five_inch_option": five_inch_option,
|
193 |
}
|
194 |
|
195 |
# 处理尺寸模式
|
|
|
378 |
)
|
379 |
|
380 |
# 调整图片大小
|
381 |
+
output_image_path_dict = self._save_image(
|
382 |
result_image_standard,
|
383 |
result_image_hd,
|
384 |
result_image_layout,
|
385 |
idphoto_json,
|
386 |
+
format="jpeg" if idphoto_json["jpeg_format_option"] else "png",
|
387 |
+
)
|
388 |
+
|
389 |
+
# 返回
|
390 |
+
if result_image_layout is not None:
|
391 |
+
result_image_layout = output_image_path_dict["layout"]["path"]
|
392 |
+
|
393 |
+
return self._create_response(
|
394 |
+
output_image_path_dict["standard"]["path"],
|
395 |
+
output_image_path_dict["hd"]["path"],
|
396 |
+
result_image_standard_png,
|
397 |
+
result_image_hd_png,
|
398 |
+
gr.update(value=result_image_layout, visible=result_image_layout_visible),
|
399 |
+
gr.update(value=result_image_template, visible=result_image_template_visible),
|
400 |
+
gr.update(visible = result_image_template_visible),
|
401 |
)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
402 |
|
403 |
# 渲染背景
|
404 |
def _render_background(self, result_image_standard, result_image_hd, idphoto_json, language):
|
|
|
448 |
typography_arr, typography_rotate = generate_layout_array(
|
449 |
input_height=idphoto_json["size"][0],
|
450 |
input_width=idphoto_json["size"][1],
|
451 |
+
LAYOUT_HEIGHT= 1205 if not idphoto_json["five_inch_option"] else 1051,
|
452 |
+
LAYOUT_WIDTH= 1795 if not idphoto_json["five_inch_option"] else 1500,
|
453 |
)
|
454 |
|
455 |
result_image_layout = generate_layout_image(
|
|
|
459 |
height=idphoto_json["size"][0],
|
460 |
width=idphoto_json["size"][1],
|
461 |
crop_line=idphoto_json["layout_photo_crop_line_option"],
|
462 |
+
LAYOUT_HEIGHT=1205 if not idphoto_json["five_inch_option"] else 1051,
|
463 |
+
LAYOUT_WIDTH=1795 if not idphoto_json["five_inch_option"] else 1500,
|
464 |
)
|
465 |
|
466 |
return result_image_layout, True
|
|
|
514 |
result_image_hd = add_watermark(image=result_image_hd, **watermark_params)
|
515 |
return result_image_standard, result_image_hd
|
516 |
|
517 |
+
def _save_image(
|
518 |
self,
|
519 |
result_image_standard,
|
520 |
result_image_hd,
|
|
|
522 |
idphoto_json,
|
523 |
format="png",
|
524 |
):
|
525 |
+
# 设置输出路径(临时目录)
|
526 |
+
import tempfile
|
527 |
+
base_path = tempfile.mkdtemp()
|
|
|
|
|
528 |
timestamp = int(time.time())
|
529 |
output_paths = {
|
530 |
"standard": {
|
|
|
556 |
custom_kb,
|
557 |
dpi=custom_dpi,
|
558 |
)
|
|
|
559 |
# 保存高清图像和排版图像
|
560 |
save_image_dpi_to_bytes(
|
561 |
result_image_hd, output_paths["hd"]["path"], dpi=custom_dpi
|
562 |
)
|
|
|
563 |
if result_image_layout is not None:
|
564 |
save_image_dpi_to_bytes(
|
565 |
result_image_layout, output_paths["layout"]["path"], dpi=custom_dpi
|
566 |
)
|
|
|
567 |
|
568 |
return output_paths
|
569 |
|
570 |
# 只有自定义DPI的情况
|
571 |
elif custom_dpi:
|
572 |
for key in output_paths:
|
|
|
573 |
# 保存所有图像,使用自定义DPI
|
574 |
+
# 如果只换底,则不保存排版图像
|
575 |
if key == "layout" and result_image_layout is None:
|
576 |
+
continue
|
577 |
+
output_paths[key]["path"] += f"_{custom_dpi}dpi.{format}"
|
578 |
+
save_image_dpi_to_bytes(
|
579 |
+
locals()[f"result_image_{key}"],
|
580 |
+
output_paths[key]["path"],
|
581 |
+
dpi=custom_dpi,
|
582 |
+
)
|
|
|
583 |
|
584 |
return output_paths
|
585 |
|
586 |
# 只有自定义KB的情况
|
587 |
elif custom_kb:
|
588 |
output_paths["standard"]["path"] += f"_{custom_kb}kb.{format}"
|
589 |
+
output_paths["hd"]["path"] += f".{format}"
|
590 |
+
if not (key == "layout" and result_image_layout is None):
|
591 |
+
output_paths[key]["path"] += f".{format}"
|
592 |
+
|
593 |
+
# 只调整标准图像大小
|
594 |
resize_image_to_kb(
|
595 |
result_image_standard,
|
596 |
output_paths["standard"]["path"],
|
597 |
custom_kb,
|
598 |
dpi=300,
|
599 |
)
|
600 |
+
|
601 |
+
# 保存高清图像和排版图像
|
602 |
+
save_image_dpi_to_bytes(
|
603 |
+
result_image_hd, output_paths["hd"]["path"], dpi=300
|
604 |
+
)
|
605 |
+
if result_image_layout is not None:
|
606 |
+
save_image_dpi_to_bytes(
|
607 |
+
result_image_layout, output_paths["layout"]["path"], dpi=300
|
608 |
+
)
|
609 |
|
610 |
return output_paths
|
611 |
+
# 没有自定义设置
|
612 |
+
else:
|
613 |
+
output_paths["standard"]["path"] += f".{format}"
|
614 |
+
output_paths["hd"]["path"] += f".{format}"
|
615 |
+
output_paths["layout"]["path"] += f".{format}"
|
616 |
+
|
617 |
+
# 保存所有图像
|
618 |
+
save_image_dpi_to_bytes(
|
619 |
+
result_image_standard, output_paths["standard"]["path"], dpi=300
|
620 |
+
)
|
621 |
+
save_image_dpi_to_bytes(
|
622 |
+
result_image_hd, output_paths["hd"]["path"], dpi=300
|
623 |
+
)
|
624 |
+
if result_image_layout is not None:
|
625 |
+
save_image_dpi_to_bytes(
|
626 |
+
result_image_layout, output_paths["layout"]["path"], dpi=300
|
627 |
+
)
|
628 |
+
|
629 |
+
return output_paths
|
630 |
+
|
631 |
|
632 |
def _create_response(
|
633 |
self,
|
|
|
638 |
result_layout_image_gr,
|
639 |
result_image_template_gr,
|
640 |
result_image_template_accordion_gr,
|
641 |
+
):
|
642 |
"""创建响应"""
|
643 |
response = [
|
644 |
result_image_standard,
|
demo/ui.py
CHANGED
@@ -148,6 +148,7 @@ def create_ui(
|
|
148 |
label=LOCALES["plugin"][DEFAULT_LANG]["label"],
|
149 |
choices=LOCALES["plugin"][DEFAULT_LANG]["choices"],
|
150 |
interactive=True,
|
|
|
151 |
)
|
152 |
|
153 |
# TAB2 - 高级参数 ------------------------------------------------
|
|
|
148 |
label=LOCALES["plugin"][DEFAULT_LANG]["label"],
|
149 |
choices=LOCALES["plugin"][DEFAULT_LANG]["choices"],
|
150 |
interactive=True,
|
151 |
+
value=LOCALES["plugin"][DEFAULT_LANG]["value"]
|
152 |
)
|
153 |
|
154 |
# TAB2 - 高级参数 ------------------------------------------------
|
hivision/creator/layout_calculator.py
CHANGED
@@ -75,10 +75,8 @@ def judge_layout(
|
|
75 |
return layout_mode, centerBlockWidth_1, centerBlockHeight_1
|
76 |
|
77 |
|
78 |
-
def generate_layout_array(input_height, input_width):
|
79 |
# 1.基础参数表
|
80 |
-
LAYOUT_WIDTH = 1746
|
81 |
-
LAYOUT_HEIGHT = 1180
|
82 |
PHOTO_INTERVAL_H = 30 # 证件照与证件照之间的垂直距离
|
83 |
PHOTO_INTERVAL_W = 30 # 证件照与证件照之间的水平距离
|
84 |
SIDES_INTERVAL_H = 50 # 证件照与画布边缘的垂直距离
|
@@ -118,12 +116,12 @@ def generate_layout_array(input_height, input_width):
|
|
118 |
|
119 |
|
120 |
def generate_layout_image(
|
121 |
-
input_image, typography_arr, typography_rotate, width=295, height=413,
|
|
|
|
|
|
|
122 |
):
|
123 |
-
|
124 |
-
LAYOUT_WIDTH = 1746
|
125 |
-
LAYOUT_HEIGHT = 1180
|
126 |
-
|
127 |
# 创建一个白色背景的空白画布
|
128 |
white_background = np.zeros([LAYOUT_HEIGHT, LAYOUT_WIDTH, 3], np.uint8)
|
129 |
white_background.fill(255)
|
|
|
75 |
return layout_mode, centerBlockWidth_1, centerBlockHeight_1
|
76 |
|
77 |
|
78 |
+
def generate_layout_array(input_height, input_width, LAYOUT_WIDTH=1795, LAYOUT_HEIGHT=1205):
|
79 |
# 1.基础参数表
|
|
|
|
|
80 |
PHOTO_INTERVAL_H = 30 # 证件照与证件照之间的垂直距离
|
81 |
PHOTO_INTERVAL_W = 30 # 证件照与证件照之间的水平距离
|
82 |
SIDES_INTERVAL_H = 50 # 证件照与画布边缘的垂直距离
|
|
|
116 |
|
117 |
|
118 |
def generate_layout_image(
|
119 |
+
input_image, typography_arr, typography_rotate, width=295, height=413,
|
120 |
+
crop_line:bool=False,
|
121 |
+
LAYOUT_WIDTH=1795,
|
122 |
+
LAYOUT_HEIGHT=1205,
|
123 |
):
|
124 |
+
|
|
|
|
|
|
|
125 |
# 创建一个白色背景的空白画布
|
126 |
white_background = np.zeros([LAYOUT_HEIGHT, LAYOUT_WIDTH, 3], np.uint8)
|
127 |
white_background.fill(255)
|