{"id":1852,"date":"2024-08-16T11:14:53","date_gmt":"2024-08-16T03:14:53","guid":{"rendered":"https:\/\/www.clipimg.com\/wp\/?post_type=docs&#038;p=1852"},"modified":"2026-01-09T10:00:43","modified_gmt":"2026-01-09T02:00:43","password":"","slug":"idphoto_make","status":"publish","type":"docs","link":"https:\/\/www.clipimg.com\/wp\/docs\/idphoto_make\/","title":{"rendered":"\u8bc1\u4ef6\u7167\u5236\u4f5cAPI\u6587\u6863"},"content":{"rendered":"\n<p>\u53ef\u7acb\u56fe ClipImg \u8bc1\u4ef6\u7167\u5236\u4f5c API \u670d\u52a1<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"\u63a5\u53e3\u6982\u8ff0\">\u63a5\u53e3\u6982\u8ff0<\/h2>\n\n\n\n<p>\u672c\u63a5\u53e3\u63d0\u4f9b\u4e00\u7ad9\u5f0f\u7684\u8bc1\u4ef6\u7167\u667a\u80fd\u5236\u4f5c\u670d\u52a1\uff0c\u80fd\u591f\u5c06\u7528\u6237\u4e0a\u4f20\u7684\u751f\u6d3b\u7167\u6216\u81ea\u62cd\u7167\u81ea\u52a8\u5904\u7406\u4e3a\u7b26\u5408\u7279\u5b9a\u89c4\u683c\u7684\u6807\u51c6\u8bc1\u4ef6\u7167\u3002\u63a5\u53e3\u96c6\u6210\u4e86\u4eba\u8138\u68c0\u6d4b\u3001\u4eba\u50cf\u62a0\u56fe\u3001\u667a\u80fd\u88c1\u526a\u3001\u80cc\u666f\u66ff\u6362\u3001\u7f8e\u989c\u7f8e\u80a4\u3001\u670d\u88c5\u66ff\u6362\uff08\u9700\u914d\u5408\u53c2\u6570\uff09\u7b49\u6838\u5fc3\u80fd\u529b\uff0c\u652f\u6301\u8f93\u51fa\u9ad8\u6e05\u7535\u5b50\u7167\u53ca\u6392\u7248\u7167\u3002<\/p>\n\n\n\n<p>\u901a\u8fc7\u7b80\u5355\u7684\u53c2\u6570\u914d\u7f6e\uff0c\u5f00\u53d1\u8005\u53ef\u4ee5\u8f7b\u677e\u5e94\u5bf9\u6570\u767e\u79cd\u8bc1\u4ef6\u7167\u89c4\u683c\u9700\u6c42\uff0c\u65e0\u9700\u6df1\u5165\u4e86\u89e3\u56fe\u50cf\u5904\u7406\u7b97\u6cd5\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"\u5178\u578b\u4f7f\u7528\u573a\u666f\">\u5178\u578b\u4f7f\u7528\u573a\u666f<\/h3>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u79fb\u52a8\u7aef\u8bc1\u4ef6\u7167\u5c0f\u7a0b\u5e8f\/APP<\/strong>\uff1a\u4e3aC\u7aef\u7528\u6237\u63d0\u4f9b\u4fbf\u6377\u7684\u624b\u673a\u62cd\u8bc1\u4ef6\u7167\u670d\u52a1\uff0c\u652f\u6301\u4e00\u952e\u5236\u4f5c\u3001\u6362\u5e95\u8272\u3001\u6362\u88c5\u3002<\/li>\n\n\n\n<li><strong>\u4f01\u4e1a\/\u6821\u56ed\u4fe1\u606f\u5316\u7cfb\u7edf<\/strong>\uff1a\u96c6\u6210\u5728OA\u3001\u6559\u52a1\u7cfb\u7edf\u4e2d\uff0c\u7528\u4e8e\u91c7\u96c6\u5458\u5de5\u5de5\u724c\u7167\u3001\u5b66\u751f\u5b66\u7c4d\u7167\uff0c\u5b9e\u73b0\u7167\u7247\u98ce\u683c\u7edf\u4e00\u5316\u3002<\/li>\n\n\n\n<li><strong>\u653f\u52a1\/\u8003\u8bd5\u62a5\u540d\u5e73\u53f0<\/strong>\uff1a\u5728\u62a5\u540d\u6d41\u7a0b\u4e2d\u5d4c\u5165\u8bc1\u4ef6\u7167\u5236\u4f5c\u529f\u80fd\uff0c\u786e\u4fdd\u4e0a\u4f20\u7684\u7167\u7247\u7b26\u5408\u5b98\u65b9\u5c3a\u5bf8\u548c\u80cc\u666f\u8981\u6c42\uff0c\u51cf\u5c11\u5ba1\u6838\u6210\u672c\u3002<\/li>\n\n\n\n<li><strong>\u81ea\u52a9\u7167\u76f8\u8bbe\u5907<\/strong>\uff1a\u4e3a\u7ebf\u4e0b\u81ea\u52a9\u7ec8\u7aef\u63d0\u4f9b\u6838\u5fc3\u56fe\u50cf\u5904\u7406\u5f15\u64ce\uff0c\u5b9e\u73b0\u5373\u62cd\u5373\u5f97\u3002<\/li>\n<\/ol>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u63a5\u53e3\u5730\u5740<\/strong>:&nbsp;<code>https:\/\/www.clipimg.com\/api\/idphoto\/make<\/code><\/li>\n\n\n\n<li><strong>\u5728\u7ebf\u6f14\u793a<\/strong>:&nbsp;<a href=\"https:\/\/apidemo.clipimg.com\/\">\u8bd5\u4e00\u8bd5<\/a><\/li>\n\n\n\n<li><strong>Postman<\/strong>:&nbsp;<a href=\"https:\/\/www.postman.com\/qq747954681\/clipimg-com-apidemo\/documentation\/96c8bsy\/apidemo\">\u6587\u6863<\/a><\/li>\n\n\n\n<li><strong>\u8bf7\u6c42\u65b9\u5f0f<\/strong>:&nbsp;<code>POST<\/code><\/li>\n\n\n\n<li><strong>Content-Type<\/strong>:&nbsp;<code>application\/json<\/code><\/li>\n\n\n\n<li><strong>\u9700\u8981API Key<\/strong>: \u662f<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"\u8bf7\u6c42\u683c\u5f0f\">\u8bf7\u6c42\u683c\u5f0f<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"headers\">Headers<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>X-API-Key: your_api_key_here\nContent-Type: application\/json\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"\u8bf7\u6c42\u4f53\u53c2\u6570\">\u8bf7\u6c42\u4f53\u53c2\u6570<\/h3>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"\u5fc5\u987b\u53c2\u6570\">\u5fc5\u987b\u53c2\u6570<\/h4>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u53c2\u6570<\/th><th>\u7c7b\u578b<\/th><th>\u8bf4\u660e<\/th><\/tr><\/thead><tbody><tr><td>width<\/td><td>int<\/td><td>\u8bc1\u4ef6\u7167\u76ee\u6807\u5bbd\u5ea6\uff08\u50cf\u7d20\uff09\uff0c\u82e5\u63d0\u4f9b&nbsp;<code>spec_id<\/code>&nbsp;\u53ef\u7701\u7565<\/td><\/tr><tr><td>height<\/td><td>int<\/td><td>\u8bc1\u4ef6\u7167\u76ee\u6807\u9ad8\u5ea6\uff08\u50cf\u7d20\uff09\uff0c\u82e5\u63d0\u4f9b&nbsp;<code>spec_id<\/code>&nbsp;\u53ef\u7701\u7565<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"\u56fe\u7247\u8f93\u5165\u4e8c\u9009\u4e00\">\u56fe\u7247\u8f93\u5165\uff08\u4e8c\u9009\u4e00\uff09<\/h4>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u53c2\u6570<\/th><th>\u7c7b\u578b<\/th><th>\u8bf4\u660e<\/th><\/tr><\/thead><tbody><tr><td>file<\/td><td>string<\/td><td>Base64 \u7f16\u7801\u7684\u56fe\u7247\u6570\u636e<\/td><\/tr><tr><td>file_url<\/td><td>string<\/td><td>\u53ef\u76f4\u63a5\u8bbf\u95ee\u7684\u56fe\u7247 URL\uff08\u652f\u6301 JPG\/PNG\uff1b\u5355\u6587\u4ef6\u6700\u5927 20MB\uff09\u3002\u82e5\u540c\u65f6\u63d0\u4f9b&nbsp;<code>file<\/code>&nbsp;\u4e0e&nbsp;<code>file_url<\/code>\uff0c\u4ee5&nbsp;<code>file<\/code>&nbsp;\u4f18\u5148<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"\u5236\u4f5c\u53c2\u6570\">\u5236\u4f5c\u53c2\u6570<\/h4>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u53c2\u6570<\/th><th>\u7c7b\u578b<\/th><th>\u9ed8\u8ba4\u503c<\/th><th>\u8bf4\u660e<\/th><\/tr><\/thead><tbody><tr><td>spec_id<\/td><td>int<\/td><td>null<\/td><td>\u89c4\u683cID\uff08\u53ef\u9009\uff0c\u7528\u4e8e\u9884\u8bbe\u53c2\u6570\uff0c\u5982\u4f20\u5165\u5219\u81ea\u52a8\u586b\u5145\u5bbd\u9ad8\u53ca\u5176\u4ed6\u89c4\u683c\u53c2\u6570\uff09<\/td><\/tr><tr><td>fair_level<\/td><td>float<\/td><td>0.0<\/td><td>\u7f8e\u989c\u7b49\u7ea7\uff0c\u53d6\u503c 0.0-1.0\uff0c0\u8868\u793a\u4e0d\u7f8e\u989c<\/td><\/tr><tr><td>color<\/td><td>array<\/td><td>null<\/td><td>\u80cc\u666f\u989c\u8272\u914d\u7f6e\u6570\u7ec4\uff0c\u9ed8\u8ba4\u5305\u542b\u84dd\u3001\u7ea2\u3001\u767d\u4e09\u79cd\u989c\u8272<\/td><\/tr><tr><td>enhance_image_quality<\/td><td>int<\/td><td>1<\/td><td>\u56fe\u50cf\u8d28\u91cf\u589e\u5f3a\uff080\/1\uff09\uff0c1\u8868\u793a\u5f00\u542f<\/td><\/tr><tr><td>head_region<\/td><td>int<\/td><td>0<\/td><td>\u5934\u90e8\u533a\u57df\u9009\u62e9\uff080:\u5305\u542b\u5934\u53d1\u8033\u6735\uff0c1:\u4ec5\u8138\u988a\uff09<br>0:&nbsp;<img decoding=\"async\" src=\"https:\/\/clipimg.com\/wp\/wp-content\/uploads\/2023\/08\/a7d2d4c9-1182-4d3b-be6f-25384bc45b23.png\" width=\"150\"><br>1:&nbsp;<img decoding=\"async\" src=\"https:\/\/clipimg.com\/wp\/wp-content\/uploads\/2023\/08\/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20230825112004.png\" width=\"150\"><\/td><\/tr><tr><td>align_face<\/td><td>int<\/td><td>0<\/td><td>\u4eba\u8138\u59ff\u6001\u8c03\u6574\uff080\/1\uff09\uff0c1\u8868\u793a\u5f00\u542f\u81ea\u52a8\u77eb\u6b63<\/td><\/tr><tr><td>file_format<\/td><td>int<\/td><td>0<\/td><td>\u8f93\u51fa\u683c\u5f0f\uff080:PNG\uff0c1:JPG\uff09<\/td><\/tr><tr><td>dpi<\/td><td>float<\/td><td>300.0<\/td><td>\u56fe\u7247\u5206\u8fa8\u7387<\/td><\/tr><tr><td>file_size_min<\/td><td>int<\/td><td>0<\/td><td>\u6700\u5c0f\u6587\u4ef6\u5927\u5c0f\uff08\u5355\u4f4dKB\uff0c\u4ec5JPG\u751f\u6548\uff1b0\u8868\u793a\u4e0d\u9650\u5236\uff09<\/td><\/tr><tr><td>file_size_max<\/td><td>int<\/td><td>0<\/td><td>\u6700\u5927\u6587\u4ef6\u5927\u5c0f\uff08\u5355\u4f4dKB\uff0c\u4ec5JPG\u751f\u6548\uff1b0\u8868\u793a\u4e0d\u9650\u5236\uff09<\/td><\/tr><tr><td>apply_sharpening<\/td><td>int<\/td><td>0<\/td><td>\u8fbe\u4e0d\u5230\u6700\u5c0f\u4f53\u79ef\u65f6\u662f\u5426\u8fdb\u884c\u8f7b\u5ea6\u9510\u5316\u4ee5\u589e\u5927\u6587\u4ef6\u4f53\u79ef\uff080\/1\uff0c\u4ec5JPG\u4e14\u8bbe\u7f6e\u4e86file_size_min&gt;0\u65f6\u53ef\u80fd\u751f\u6548\uff09<\/td><\/tr><tr><td>watermark_id<\/td><td>int<\/td><td>null<\/td><td>\u81ea\u5b9a\u4e49\u6c34\u5370id\uff0c\u9700\u8981\u5728API\u7ba1\u7406\u4e0a\u4f20<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"\u4eba\u8138\u6bd4\u4f8b\u53c2\u6570\">\u4eba\u8138\u6bd4\u4f8b\u53c2\u6570<\/h4>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u53c2\u6570<\/th><th>\u7c7b\u578b<\/th><th>\u9ed8\u8ba4\u503c<\/th><th>\u8bf4\u660e<\/th><\/tr><\/thead><tbody><tr><td>face_ratio_min<\/td><td>float<\/td><td>0.55<\/td><td>\u4eba\u8138\u6700\u5c0f\u6bd4\u4f8b<\/td><\/tr><tr><td>face_ratio<\/td><td>float<\/td><td>0.8<\/td><td>\u4eba\u8138\u6700\u5927\u6bd4\u4f8b<\/td><\/tr><tr><td>head_height_ratio_min<\/td><td>float<\/td><td>0.01<\/td><td>\u5934\u90e8\u9ad8\u5ea6\u6700\u5c0f\u6bd4\u4f8b<\/td><\/tr><tr><td>head_height_ratio_max<\/td><td>float<\/td><td>1.0<\/td><td>\u5934\u90e8\u9ad8\u5ea6\u6700\u5927\u6bd4\u4f8b<\/td><\/tr><tr><td>eye_distance_ratio_min<\/td><td>float<\/td><td>0.01<\/td><td>\u53cc\u773c\u95f4\u8ddd\u6700\u5c0f\u6bd4\u4f8b<\/td><\/tr><tr><td>eye_distance_ratio_max<\/td><td>float<\/td><td>1.0<\/td><td>\u53cc\u773c\u95f4\u8ddd\u6700\u5927\u6bd4\u4f8b<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"\u4f4d\u7f6e\u53c2\u6570\">\u4f4d\u7f6e\u53c2\u6570<\/h4>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u53c2\u6570<\/th><th>\u7c7b\u578b<\/th><th>\u9ed8\u8ba4\u503c<\/th><th>\u8bf4\u660e<\/th><\/tr><\/thead><tbody><tr><td>head_top_gap_ratio<\/td><td>float<\/td><td>0.08<\/td><td>\u5934\u9876\u79bb\u4e0a\u8fb9\u7f18\u8ddd\u79bb\u6bd4\u4f8b<\/td><\/tr><tr><td>eyes_to_botttom_ratio_min<\/td><td>float<\/td><td>0.46<\/td><td>\u773c\u775b\u79bb\u4e0b\u8fb9\u7f18\u6700\u5c0f\u8ddd\u79bb\u6bd4\u4f8b<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<figure class=\"wp-block-image\"><img decoding=\"async\" src=\"https:\/\/clipimg.com\/wp\/wp-content\/uploads\/2023\/08\/%E5%BE%AE%E4%BF%A1%E5%9B%BE%E7%89%87_20230825112004.png\" alt=\"\u4eba\u8138\u6bd4\u4f8b\u793a\u4f8b\"\/><\/figure>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"\u57fa\u7840\u68c0\u6d4b\u53c2\u6570\u7528\u4e8e\u5236\u4f5c\u65f6\u7684\u7b5b\u9009\">\u57fa\u7840\u68c0\u6d4b\u53c2\u6570\uff08\u7528\u4e8e\u5236\u4f5c\u65f6\u7684\u7b5b\u9009\uff09<\/h4>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u53c2\u6570<\/th><th>\u7c7b\u578b<\/th><th>\u9ed8\u8ba4\u503c<\/th><th>\u8bf4\u660e<\/th><\/tr><\/thead><tbody><tr><td>facepose<\/td><td>int<\/td><td>20<\/td><td>\u4eba\u8138\u89d2\u5ea6\u5bb9\u5dee\uff08\u5ea6\u6570\uff09\u3002\u5efa\u8bae\u8bbe\u7f6e\uff1a15-30\u00b0\uff08\u5141\u8bb8\u8f7b\u5fae\u504f\u8f6c\uff09\u30015-15\u00b0\uff08\u4e25\u683c\u8981\u6c42\uff09\uff0c\u8d85\u51fa\u8bbe\u5b9a\u89d2\u5ea6\u7684\u7167\u7247\u5c06\u65e0\u6cd5\u5236\u4f5c\uff0c\u8bbe\u7f6e\u4e3a0\u8868\u793a\u4e0d\u68c0\u6d4b\u89d2\u5ea6<br><img decoding=\"async\" src=\"https:\/\/www.clipimg.com\/wp\/wp-content\/uploads\/2023\/12\/40cc4b39da3a4dc99e6a8f6fbbedcae6.png\" width=\"350\"><\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<blockquote class=\"wp-block-quote is-layout-flow wp-block-quote-is-layout-flow\">\n<p>\u5982\u9700\u66f4\u590d\u6742\u7684\u7b5b\u9009\u68c0\u6d4b\uff0c\u8bf7\u4f7f\u7528&nbsp;<a href=\"https:\/\/www.clipimg.com\/wp\/docs\/idphoto_make_and_check\/\">\u8bc1\u4ef6\u7167\u5236\u4f5c\u52a0\u68c0\u6d4b\u63a5\u53e3<\/a><\/p>\n<\/blockquote>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"\u80cc\u666f\u989c\u8272\u914d\u7f6e\u683c\u5f0f\">\u80cc\u666f\u989c\u8272\u914d\u7f6e\u683c\u5f0f<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>&#91;\n  {\n    \"name\": \"white\",\n    \"start_color\": \"#FFFFFF\",\n    \"enc_color\": null\n  },\n  {\n    \"name\": \"red\",\n    \"start_color\": \"#D9001B\",\n    \"enc_color\": null\n  },\n  {\n    \"name\": \"blue\",\n    \"start_color\": \"#02A7F0\",\n    \"enc_color\": null\n  },\n  {\n    \"name\": \"SkyBlueGradient\",\n    \"start_color\": \"#87CEEB\",\n    \"enc_color\": \"#1E90FF\"\n  }\n]\n<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li><code>name<\/code>: \u80cc\u666f\u8272\u540d\u79f0\uff08\u7eaf\u5b57\u6bcd\uff09<\/li>\n\n\n\n<li><code>start_color<\/code>: \u80cc\u666f\u8272\u503c\uff08Hex\uff09<\/li>\n\n\n\n<li><code>enc_color<\/code>: \u6e10\u53d8\u8272\u7ed3\u675f\u8272\u503c\uff08\u53ef\u9009\uff0c\u4e0d\u4f20\u4e3a\u7eaf\u8272\uff09<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"\u6587\u4ef6\u4f53\u79ef\u7ea6\u675f\u4e0e\u9510\u5316\u4ec5jpg\u751f\u6548\">\u6587\u4ef6\u4f53\u79ef\u7ea6\u675f\u4e0e\u9510\u5316\uff08\u4ec5JPG\u751f\u6548\uff09<\/h3>\n\n\n\n<p>\u4e3a\u6ee1\u8db3\u90e8\u5206\u573a\u666f\u5bf9\u7535\u5b50\u7167\u6587\u4ef6\u4f53\u79ef\u7684\u8981\u6c42\uff0c\u63d0\u4f9b\u4ee5\u4e0b\u53c2\u6570\uff1a<code>file_size_min<\/code>\u3001<code>file_size_max<\/code>\u3001<code>apply_sharpening<\/code>\u3002<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u751f\u6548\u524d\u63d0\uff1a\u4ec5\u5f53\u8f93\u51fa\u683c\u5f0f\u4e3a JPG\uff08<code>file_format=1<\/code>\uff09\u65f6\u751f\u6548\uff1bPNG \u4e3a\u65e0\u635f\u7f16\u7801\uff0c\u4e0d\u505a\u4f53\u79ef\u63a7\u5236\u4e0e\u9510\u5316\u5904\u7406\u3002<\/li>\n\n\n\n<li>\u5355\u4f4d\u8bf4\u660e\uff1a<code>file_size_min<\/code>&nbsp;\u4e0e&nbsp;<code>file_size_max<\/code>&nbsp;\u7684\u5355\u4f4d\u5747\u4e3a KB\uff1b\u8bbe\u7f6e\u4e3a 0 \u8868\u793a\u4e0d\u9650\u5236\u3002<\/li>\n<\/ul>\n\n\n\n<p>\u5904\u7406\u903b\u8f91\uff08\u6458\u8981\uff09\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u82e5\u672a\u8bbe\u7f6e\u6700\u5c0f\/\u6700\u5927\u4f53\u79ef\uff08\u5747\u4e3a0\uff09\uff0c\u5c06\u6309\u9ed8\u8ba4\u8d28\u91cf\u4fdd\u5b58\uff08\u9ad8\u8d28\u91cf\uff09\u3002<\/li>\n\n\n\n<li>\u82e5\u8bbe\u7f6e\u4e86\u4f53\u79ef\u7ea6\u675f\uff1a\n<ul class=\"wp-block-list\">\n<li>\u5148\u4ee5\u9ad8\u8d28\u91cf\u5c1d\u8bd5\u4fdd\u5b58\uff0c\u82e5\u5df2\u5728\u8303\u56f4\u5185\u5219\u76f4\u63a5\u4f7f\u7528\uff1b<\/li>\n\n\n\n<li>\u82e5\u5728\u6700\u9ad8\u8d28\u91cf\u4e0b\u4ecd\u5c0f\u4e8e&nbsp;<code>file_size_min<\/code>\uff1a\u5148\u4ee5\u6700\u9ad8\u8d28\u91cf\u8f93\u51fa\uff1b\u82e5&nbsp;<code>apply_sharpening=1<\/code>\uff0c\u5c06\u8fdb\u884c\u8fb9\u7f18\u611f\u77e5\u7684\u6e29\u548c\u9510\u5316\u4ee5\u589e\u52a0\u7ec6\u8282\uff0c\u4ece\u800c\u63d0\u5347\u4f53\u79ef\uff0c\u518d\u6b21\u5c1d\u8bd5\u6ee1\u8db3\u6700\u5c0f\u4f53\u79ef\uff1b<\/li>\n\n\n\n<li>\u5176\u4ed6\u60c5\u51b5\u5219\u901a\u8fc7\u8d28\u91cf\u4f18\u5316\uff08\u5728\u5408\u7406\u8303\u56f4\u5185\u4e8c\u5206\u641c\u7d22\u8d28\u91cf\uff09\u4ee5\u517c\u987e\u6e05\u6670\u5ea6\u4e0e\u4f53\u79ef\u8981\u6c42\uff1b\u82e5\u4f18\u5316\u540e\u4ecd\u4f4e\u4e8e\u6700\u5c0f\u503c\uff0c\u4e14&nbsp;<code>apply_sharpening=1<\/code>\uff0c\u518d\u5c1d\u8bd5\u9510\u5316\u63d0\u5347\u4f53\u79ef\u3002<\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p>\u5efa\u8bae\uff1a<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u5e38\u89c1 295\u00d7413 \u50cf\u7d20\u8bc1\u4ef6\u7167\u53ef\u6839\u636e\u4e1a\u52a1\u8bbe\u7f6e\u5982\uff1a<code>file_size_min=30~80KB<\/code>\uff0c<code>file_size_max=100~300KB<\/code>\uff08\u4ec5\u793a\u4f8b\uff0c\u5177\u4f53\u53ef\u6309\u5e73\u53f0\u89c4\u8303\u8c03\u6574\uff09\u3002<\/li>\n\n\n\n<li><code>apply_sharpening<\/code>&nbsp;\u9ed8\u8ba4\u5173\u95ed\uff1b\u5f00\u542f\u540e\u4ec5\u5728\u4f4e\u4e8e\u6700\u5c0f\u4f53\u79ef\u65f6\u8fdb\u884c\u6e29\u548c\u9510\u5316\u3002\u8fc7\u5c0f\u7684&nbsp;<code>file_size_max<\/code>&nbsp;\u53ef\u80fd\u5bfc\u81f4\u753b\u8d28\u4e0b\u964d\uff08\u4e3a\u6ee1\u8db3\u4e0a\u9650\u4f1a\u964d\u4f4e\u8d28\u91cf\uff09\u3002<\/li>\n<\/ul>\n\n\n\n<p>\u6ce8\u610f\uff1aPNG\uff08<code>file_format=0<\/code>\uff09\u4e0d\u53c2\u4e0e\u4f53\u79ef\u8c03\u8282\u4e0e\u9510\u5316\uff0c\u6309\u65e0\u635f\u65b9\u5f0f\u76f4\u63a5\u4fdd\u5b58\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"\u8bf7\u6c42\u793a\u4f8b\">\u8bf7\u6c42\u793a\u4f8b<\/h2>\n\n\n\n<pre class=\"wp-block-code\"><code>{\n  \"file\": \"base64_encoded_image_data...\",\n  \"width\": 295,\n  \"height\": 413,\n  \"fair_level\": 0.3,\n  \"color\": &#91;\n    {\n      \"name\": \"white\",\n      \"start_color\": \"#FFFFFF\",\n      \"enc_color\": null\n    }\n  ],\n  \"dpi\": 300,\n  \"file_format\": 1,\n  \"enhance_image_quality\": 1,\n  \"align_face\": 0,\n  \"head_region\": 0,\n  \"face_ratio_min\": 0.55,\n  \"face_ratio\": 0.8,\n  \"head_height_ratio_min\": 0.01,\n  \"head_height_ratio_max\": 0.85,\n  \"eye_distance_ratio_min\": 0.01,\n  \"eye_distance_ratio_max\": 0.35,\n  \"head_top_gap_ratio\": 0.12,\n  \"eyes_to_botttom_ratio_min\": 0.75,\n  \"facepose\": 20,\n  \"file_size_min\": 60,\n  \"file_size_max\": 240,\n  \"apply_sharpening\": 1\n}\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"\u54cd\u5e94\u683c\u5f0f\">\u54cd\u5e94\u683c\u5f0f<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"\u6210\u529f\u54cd\u5e94\">\u6210\u529f\u54cd\u5e94<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>{\n  \"code\": 0,\n  \"msg\": \"Success\",\n  \"data\": {\n    \"image_id\": \"unique_image_id\",\n    \"filenames\": &#91;\n      {\n        \"preview_url\": \"https:\/\/...\",\n        \"preview_img_name\": \"d00a4..._white_preview\",\n        \"download_url\": \"https:\/\/...\",\n        \"img_name\": \"d00a4..._white\",\n        \"color_name\": \"white\",\n        \"bg_color\": \"#FFFFFF\",\n        \"print_img_name\": \"d00a4..._print_white\",\n        \"preview_print_img_name\": \"d00a4..._print_white\",\n        \"print_url\": \"https:\/\/...\",\n        \"preview_print_url\": \"https:\/\/...\"\n      }\n    ],\n    \"face_attr\": {\n      \"face_ratio\": 0.6234,\n      \"head_height_ratio\": 0.7456,\n      \"eyes_to_botttom_ratio\": 0.7234,\n      \"top_gap_ratio\": 0.1123,\n      \"eye_distance_ratio\": 0.2345\n    }\n  }\n}\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"\u9519\u8bef\u54cd\u5e94\">\u9519\u8bef\u54cd\u5e94<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>{\n  \"code\": 407,\n  \"msg\": \"\u672a\u8bc6\u522b\u5230\u4eba\u8138\uff0c\u8bf7\u786e\u4fdd\u9762\u90e8\u6e05\u6670\u53ef\u89c1\uff0c\u5149\u7ebf\u5145\u8db3\uff0c\u5e76\u6b63\u5bf9\u6444\u50cf\u5934\",\n  \"data\": &#91;]\n}\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"\u5404\u8bed\u8a00\u8c03\u7528\u793a\u4f8b\">\u5404\u8bed\u8a00\u8c03\u7528\u793a\u4f8b<\/h2>\n\n\n\n<p>\u4ee5\u4e0b\u793a\u4f8b\u6f14\u793a\u8c03\u7528&nbsp;<code>\/make<\/code>&nbsp;\u63a5\u53e3\u7684\u6700\u5c0f\u5316\u8bf7\u6c42\uff08\u4ec5\u5fc5\u586b + \u5e38\u7528\u9879\uff09\uff0c\u4f7f\u7528\u57df\u540d&nbsp;<code>https:\/\/www.clipimg.com\/api<\/code>\uff1b\u5c06 YOUR_API_KEY \u66ff\u6362\u4e3a\u771f\u5b9e\u5bc6\u94a5\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"curl\">curl<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>curl -X POST \"https:\/\/www.clipimg.com\/api\/idphoto\/make\" \\\n  -H \"X-API-Key: YOUR_API_KEY\" \\\n  -H \"Content-Type: application\/json\" \\\n  -d '{\n    \"file\": \"BASE64_IMAGE_DATA\",\n    \"width\": 295,\n    \"height\": 413,\n    \"file_format\": 1,\n    \"dpi\": 300\n  }'\n<\/code><\/pre>\n\n\n\n<h4 class=\"wp-block-heading\" id=\"\u4f7f\u7528-file_url-\u8f93\u5165\u53ef\u9009\">\u4f7f\u7528 file_url \u8f93\u5165\uff08\u53ef\u9009\uff09<\/h4>\n\n\n\n<p>\u4ee5\u4e0b\u4e3a\u4f7f\u7528\u7f51\u7edc\u56fe\u7247 URL \u8f93\u5165\u7684\u6700\u5c0f\u793a\u4f8b\uff1a<\/p>\n\n\n\n<p>\u2022 curl<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>curl -X POST \"https:\/\/www.clipimg.com\/api\/idphoto\/make\" \\\n  -H \"X-API-Key: YOUR_API_KEY\" \\\n  -H \"Content-Type: application\/json\" \\\n  -d '{\n    \"file_url\": \"https:\/\/example.com\/path\/to\/photo.jpg\",\n    \"width\": 295,\n    \"height\": 413,\n    \"file_format\": 1,\n    \"dpi\": 300\n  }'\n<\/code><\/pre>\n\n\n\n<p>\u2022 Python\uff08requests\uff09<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>import json, requests\n\napi = \"https:\/\/www.clipimg.com\/api\/idphoto\/make\"\nheaders = {\"X-API-Key\": \"YOUR_API_KEY\", \"Content-Type\": \"application\/json\"}\n\npayload = {\n    \"file_url\": \"https:\/\/example.com\/path\/to\/photo.jpg\",\n    \"width\": 295,\n    \"height\": 413,\n    \"file_format\": 1,\n    \"dpi\": 300\n}\n\nr = requests.post(api, headers=headers, data=json.dumps(payload), timeout=60)\nprint(r.status_code)\nprint(r.json())\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"pythonrequests\">Python\uff08requests\uff09<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>import base64, json, requests\n\napi = \"https:\/\/www.clipimg.com\/api\/idphoto\/make\"\nheaders = {\"X-API-Key\": \"YOUR_API_KEY\", \"Content-Type\": \"application\/json\"}\n\nwith open(\"photo.jpg\", \"rb\") as f:\n    img_b64 = base64.b64encode(f.read()).decode(\"ascii\")\n\npayload = {\n    \"file\": img_b64,\n    \"width\": 295,\n    \"height\": 413,\n    \"file_format\": 1,\n    \"dpi\": 300,\n    \"fair_level\": 0.3\n}\n\nr = requests.post(api, headers=headers, data=json.dumps(payload), timeout=60)\nprint(r.status_code)\nprint(r.json())\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"nodejsaxios\">Node.js\uff08axios\uff09<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>const fs = require('fs');\nconst axios = require('axios');\n\n(async () =&gt; {\n  const imgB64 = fs.readFileSync('photo.jpg').toString('base64');\n  const resp = await axios.post(\n  'https:\/\/www.clipimg.com\/api\/idphoto\/make',\n    {\n      file: imgB64,\n      width: 295,\n      height: 413,\n      file_format: 1,\n      dpi: 300,\n      fair_level: 0.3\n    },\n    { headers: { 'X-API-Key': 'YOUR_API_KEY', 'Content-Type': 'application\/json' }, timeout: 60000 }\n  );\n  console.log(resp.data);\n})();\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"phpcurl-\u6269\u5c55\">PHP\uff08cURL \u6269\u5c55\uff09<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\n$imgB64 = base64_encode(file_get_contents('photo.jpg'));\n$data = &#91;\n  'file' =&gt; $imgB64,\n  'width' =&gt; 295,\n  'height' =&gt; 413,\n  'file_format' =&gt; 1,\n  'dpi' =&gt; 300,\n  'fair_level' =&gt; 0.3\n];\n\n$ch = curl_init('https:\/\/www.clipimg.com\/api\/idphoto\/make');\ncurl_setopt_array($ch, &#91;\n  CURLOPT_HTTPHEADER =&gt; &#91;\n    'X-API-Key: YOUR_API_KEY',\n    'Content-Type: application\/json'\n  ],\n  CURLOPT_POST =&gt; true,\n  CURLOPT_POSTFIELDS =&gt; json_encode($data, JSON_UNESCAPED_UNICODE),\n  CURLOPT_RETURNTRANSFER =&gt; true,\n  CURLOPT_TIMEOUT =&gt; 60\n]);\n$resp = curl_exec($ch);\nif (curl_errno($ch)) { die('cURL Error: '.curl_error($ch)); }\ncurl_close($ch);\necho $resp;\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"javaokhttp\">Java\uff08OkHttp\uff09<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>import java.nio.file.*;\nimport java.util.Base64;\nimport okhttp3.*;\n\npublic class Demo {\n  public static void main(String&#91;] args) throws Exception {\n  String api = \"https:\/\/www.clipimg.com\/api\/idphoto\/make\";\n    String apiKey = \"YOUR_API_KEY\";\n    byte&#91;] img = Files.readAllBytes(Paths.get(\"photo.jpg\"));\n    String imgB64 = Base64.getEncoder().encodeToString(img);\n    String json = \"{\" +\n      \"\\\"file\\\":\\\"\" + imgB64 + \"\\\",\" +\n      \"\\\"width\\\":295,\\\"height\\\":413,\\\"file_format\\\":1,\\\"dpi\\\":300,\" +\n      \"\\\"fair_level\\\":0.3\" +\n    \"}\";\n\n    OkHttpClient client = new OkHttpClient.Builder().build();\n    RequestBody body = RequestBody.create(json, MediaType.parse(\"application\/json\"));\n    Request req = new Request.Builder()\n        .url(api)\n        .addHeader(\"X-API-Key\", apiKey)\n        .post(body)\n        .build();\n    try (Response resp = client.newCall(req).execute()) {\n      System.out.println(resp.code());\n      System.out.println(resp.body().string());\n    }\n  }\n}\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"chttpclient--systemtextjson\">C#\uff08HttpClient + System.Text.Json\uff09<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>using System;\nusing System.IO;\nusing System.Net.Http;\nusing System.Text;\nusing System.Text.Json;\nusing System.Threading.Tasks;\n\nclass Program {\n  static async Task Main() {\n  var api = \"https:\/\/www.clipimg.com\/api\/idphoto\/make\";\n    var apiKey = \"YOUR_API_KEY\";\n    var imgB64 = Convert.ToBase64String(await File.ReadAllBytesAsync(\"photo.jpg\"));\n    var payload = new {\n      file = imgB64,\n      width = 295,\n      height = 413,\n      file_format = 1,\n      dpi = 300,\n      fair_level = 0.3\n    };\n    using var http = new HttpClient();\n    var req = new HttpRequestMessage(HttpMethod.Post, api);\n    req.Headers.Add(\"X-API-Key\", apiKey);\n    req.Content = new StringContent(JsonSerializer.Serialize(payload), Encoding.UTF8, \"application\/json\");\n    var resp = await http.SendAsync(req);\n    Console.WriteLine((int)resp.StatusCode);\n    Console.WriteLine(await resp.Content.ReadAsStringAsync());\n  }\n}\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"\u4e0b\u8f7d\u65e0\u6c34\u5370\u56fe\u7247\u793a\u4f8b\">\u4e0b\u8f7d\u65e0\u6c34\u5370\u56fe\u7247\uff08\u793a\u4f8b\uff09<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u7535\u5b50\u7167\u4e0b\u8f7d\uff1a<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>curl -X POST \"https:\/\/www.clipimg.com\/api\/idphoto\/download\/{img_name}\" \\\n  -H \"X-API-Key: YOUR_API_KEY\" \\\n  --output output.jpg\n<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>\u6392\u7248\u7167\u4e0b\u8f7d\uff1a<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>curl -X POST \"https:\/\/www.clipimg.com\/api\/idphoto\/print_download\/{print_img_name}\" \\\n  -H \"X-API-Key: YOUR_API_KEY\" \\\n  --output output_print.jpg\n<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Python\uff08requests\uff09\uff1a<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>import requests\n\nheaders = {\"X-API-Key\": \"YOUR_API_KEY\"}\n\n# \u7535\u5b50\u7167\u4e0b\u8f7d\nurl = \"https:\/\/www.clipimg.com\/api\/idphoto\/download\/{img_name}\"\n# \u6ce8\u610f\uff1a\u4e0b\u8f7d\u63a5\u53e3\u9700\u8981\u4f7f\u7528 POST \u65b9\u6cd5\nwith requests.post(url, headers=headers, stream=True) as r:\n    if r.status_code == 200:\n        with open(\"output.jpg\", \"wb\") as f:\n            for chunk in r.iter_content(chunk_size=8192):\n                f.write(chunk)\n        print(\"\u7535\u5b50\u7167\u4e0b\u8f7d\u6210\u529f\")\n    else:\n        print(f\"\u4e0b\u8f7d\u5931\u8d25: {r.status_code} - {r.text}\")\n\n# \u6392\u7248\u7167\u4e0b\u8f7d\nprint_url = \"https:\/\/www.clipimg.com\/api\/idphoto\/print_download\/{print_img_name}\"\nwith requests.post(print_url, headers=headers, stream=True) as r:\n    if r.status_code == 200:\n        with open(\"output_print.jpg\", \"wb\") as f:\n            for chunk in r.iter_content(chunk_size=8192):\n                f.write(chunk)\n        print(\"\u6392\u7248\u7167\u4e0b\u8f7d\u6210\u529f\")\n    else:\n        print(f\"\u4e0b\u8f7d\u5931\u8d25: {r.status_code} - {r.text}\")\n<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>PHP\uff08cURL\uff09\uff1a<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>&lt;?php\n$apiKey = 'YOUR_API_KEY';\n$imgName = '{img_name}'; \/\/ \u66ff\u6362\u4e3a\u5b9e\u9645\u7684 img_name\n$url = \"https:\/\/www.clipimg.com\/api\/idphoto\/download\/$imgName\";\n\n$ch = curl_init($url);\ncurl_setopt_array($ch, &#91;\n    CURLOPT_POST =&gt; true,\n    CURLOPT_HTTPHEADER =&gt; &#91;\"X-API-Key: $apiKey\"],\n    CURLOPT_RETURNTRANSFER =&gt; true,\n]);\n\n$data = curl_exec($ch);\n$httpCode = curl_getinfo($ch, CURLINFO_HTTP_CODE);\ncurl_close($ch);\n\nif ($httpCode == 200) {\n    file_put_contents('output.jpg', $data);\n    echo \"\u4e0b\u8f7d\u6210\u529f\";\n} else {\n    echo \"\u4e0b\u8f7d\u5931\u8d25: $httpCode\";\n}\n?&gt;\n<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>Java\uff08OkHttp\uff09\uff1a<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>import java.nio.file.*;\nimport okhttp3.*;\n\npublic class DownloadDemo {\n  public static void main(String&#91;] args) throws Exception {\n    String url = \"https:\/\/www.clipimg.com\/api\/idphoto\/download\/{img_name}\";\n    String apiKey = \"YOUR_API_KEY\";\n\n    OkHttpClient client = new OkHttpClient();\n    \/\/ \u4e0b\u8f7d\u63a5\u53e3\u9700\u8981 POST \u8bf7\u6c42\uff0cbody \u53ef\u4e3a\u7a7a\n    RequestBody body = RequestBody.create(new byte&#91;0], null);\n    Request req = new Request.Builder()\n        .url(url)\n        .addHeader(\"X-API-Key\", apiKey)\n        .post(body)\n        .build();\n\n    try (Response resp = client.newCall(req).execute()) {\n      if (resp.isSuccessful()) {\n        Files.write(Paths.get(\"output.jpg\"), resp.body().bytes());\n        System.out.println(\"\u4e0b\u8f7d\u6210\u529f\");\n      } else {\n        System.out.println(\"\u4e0b\u8f7d\u5931\u8d25: \" + resp.code());\n      }\n    }\n  }\n}\n<\/code><\/pre>\n\n\n\n<ul class=\"wp-block-list\">\n<li>C#\uff08HttpClient\uff09\uff1a<\/li>\n<\/ul>\n\n\n\n<pre class=\"wp-block-code\"><code>using System;\nusing System.IO;\nusing System.Net.Http;\nusing System.Threading.Tasks;\n\nclass Program {\n  static async Task Main() {\n    var url = \"https:\/\/www.clipimg.com\/api\/idphoto\/download\/{img_name}\";\n    var apiKey = \"YOUR_API_KEY\";\n\n    using var http = new HttpClient();\n    var req = new HttpRequestMessage(HttpMethod.Post, url);\n    req.Headers.Add(\"X-API-Key\", apiKey);\n    \n    var resp = await http.SendAsync(req);\n    if (resp.IsSuccessStatusCode) {\n        var bytes = await resp.Content.ReadAsByteArrayAsync();\n        await File.WriteAllBytesAsync(\"output.jpg\", bytes);\n        Console.WriteLine(\"\u4e0b\u8f7d\u6210\u529f\");\n    } else {\n        Console.WriteLine($\"\u4e0b\u8f7d\u5931\u8d25: {resp.StatusCode}\");\n    }\n  }\n}\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"\u72b6\u6001\u7801\u8bf4\u660e\">\u72b6\u6001\u7801\u8bf4\u660e<\/h2>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>\u72b6\u6001\u7801<\/th><th>\u8bf4\u660e<\/th><\/tr><\/thead><tbody><tr><td>0<\/td><td>\u6210\u529f<\/td><\/tr><tr><td>400<\/td><td>\u53c2\u6570\u9519\u8bef<\/td><\/tr><tr><td>401<\/td><td>\u6682\u4e0d\u652f\u6301\u4f60\u4e0a\u4f20\u7684\u7167\u7247\u683c\u5f0f<\/td><\/tr><tr><td>402<\/td><td>\u60a8\u7684API\u70b9\u6570\u5df2\u7528\u5b8c\uff0c\u8bf7\u53ca\u65f6\u5145\u503c<\/td><\/tr><tr><td>407<\/td><td>\u672a\u8bc6\u522b\u5230\u4eba\u8138\uff0c\u8bf7\u786e\u4fdd\u9762\u90e8\u6e05\u6670\u53ef\u89c1\uff0c\u5149\u7ebf\u5145\u8db3\uff0c\u5e76\u6b63\u5bf9\u6444\u50cf\u5934<\/td><\/tr><tr><td>408<\/td><td>\u68c0\u6d4b\u5230\u591a\u4eba\uff0c\u8bf7\u786e\u4fdd\u7167\u7247\u4e2d\u4ec5\u5305\u542b\u4e00\u4eba<\/td><\/tr><tr><td>409<\/td><td>\u68c0\u6d4b\u5230\u4eba\u8138\u5360\u7528\u4e86\u6574\u5f20\u56fe\u7247\u4e14\u8d85\u51fa\u4e86\u56fe\u7247\u8fb9\u754c\uff0c\u8bf7\u4fdd\u6301\u9002\u5f53\u8ddd\u79bb\u91cd\u65b0\u62cd\u6444<\/td><\/tr><tr><td>413<\/td><td>\u4eba\u8138\u672a\u6b63\u5bf9\u6444\u50cf\u5934\uff0c\u8bf7\u4fdd\u6301\u9762\u90e8\u6b63\u5bf9\u955c\u5934\u91cd\u65b0\u62cd\u6444<\/td><\/tr><tr><td>416<\/td><td>\u5904\u7406\u8d85\u65f6\uff0c\u8bf7\u7a0d\u540e\u518d\u8bd5<\/td><\/tr><tr><td>417<\/td><td>\u56fe\u7247\u4e2d\u4eba\u8138\u8fc7\u5927\uff0c\u65e0\u6cd5\u5236\u4f5c\u8be5\u89c4\u683c\u7684\u8bc1\u4ef6\u7167\uff08\u542b\u7ec6\u5206\u63d0\u793a\uff09<\/td><\/tr><tr><td>433<\/td><td>\u4eba\u8138\u5173\u952e\u70b9\u68c0\u6d4b\u5931\u8d25\uff0c\u8bf7\u66f4\u6362\u7167\u7247\u540e\u91cd\u65b0\u5c1d\u8bd5<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"\u9519\u8bef\u7801\u8be6\u7ec6\u8bf4\u660e\">\u9519\u8bef\u7801\u8be6\u7ec6\u8bf4\u660e<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>400 \u53c2\u6570\u9519\u8bef<\/strong>\uff1a\u7f3a\u5c11\u6216\u975e\u6cd5\u53c2\u6570\uff08\u5982 file\/width\/height \u672a\u63d0\u4f9b\u6216\u8d8a\u754c\uff09\uff0c\u6216\u6587\u4ef6\u8bfb\u53d6\u5931\u8d25\uff1b\u8bf7\u6309\u6587\u6863\u6821\u9a8c\u5165\u53c2\u3002<\/li>\n\n\n\n<li><strong>401 \u6682\u4e0d\u652f\u6301\u4f60\u4e0a\u4f20\u7684\u7167\u7247\u683c\u5f0f<\/strong>\uff1a\u56fe\u7247\u7f16\u7801\u4e0d\u88ab\u652f\u6301\u6216\u6587\u4ef6\u635f\u574f\uff1b\u8bf7\u66f4\u6362\u4e3a\u5e38\u89c1\u683c\u5f0f\uff08JPG\/PNG\uff09\u4e14\u6587\u4ef6\u5b8c\u6574\u3002<\/li>\n\n\n\n<li><strong>402 \u60a8\u7684API\u70b9\u6570\u5df2\u7528\u5b8c\uff0c\u8bf7\u53ca\u65f6\u5145\u503c<\/strong>\uff1a\u8d26\u6237\u4f59\u989d\u4e0d\u8db3\uff0c\u65e0\u6cd5\u8fdb\u884c\u4e0b\u8f7d\u65e0\u6c34\u5370\u56fe\u7247\u7b49\u6263\u8d39\u64cd\u4f5c\u3002<\/li>\n\n\n\n<li><strong>407 \u672a\u8bc6\u522b\u5230\u4eba\u8138&#8230;<\/strong>\uff1a\u65e0\u6cd5\u5b9a\u4f4d\u6709\u6548\u4eba\u8138\uff1b\u8bf7\u786e\u4fdd\u9762\u90e8\u6e05\u6670\u53ef\u89c1\uff0c\u5149\u7ebf\u5145\u8db3\uff0c\u5e76\u6b63\u5bf9\u6444\u50cf\u5934\u3002<\/li>\n\n\n\n<li><strong>408 \u68c0\u6d4b\u5230\u591a\u4eba&#8230;<\/strong>\uff1a\u68c0\u6d4b\u5230\u591a\u4eba\u8138\uff1b\u8bf7\u786e\u4fdd\u7167\u7247\u4e2d\u4ec5\u5305\u542b\u4e00\u4eba\u3002<\/li>\n\n\n\n<li><strong>409 \u68c0\u6d4b\u5230\u4eba\u8138\u5360\u7528\u4e86\u6574\u5f20\u56fe\u7247&#8230;<\/strong>\uff1a\u4eba\u8138\u533a\u57df\u8fc7\u5927\u6216\u79bb\u955c\u5934\u8fc7\u8fd1\uff0c\u8d85\u51fa\u4e86\u56fe\u7247\u8fb9\u754c\uff1b\u8bf7\u4fdd\u6301\u9002\u5f53\u8ddd\u79bb\u91cd\u65b0\u62cd\u6444\u3002<\/li>\n\n\n\n<li><strong>413 \u4eba\u8138\u672a\u6b63\u5bf9\u6444\u50cf\u5934&#8230;<\/strong>\uff1a\u4eba\u8138\u89d2\u5ea6\u504f\u5dee\u8fc7\u5927\uff1b\u8bf7\u4fdd\u6301\u9762\u90e8\u6b63\u5bf9\u955c\u5934\u91cd\u65b0\u62cd\u6444\u3002<\/li>\n\n\n\n<li><strong>416 \u5904\u7406\u8d85\u65f6\uff0c\u8bf7\u7a0d\u540e\u518d\u8bd5<\/strong>\uff1a\u5904\u7406\u8017\u65f6\u8d85\u51fa\u9650\u5236\uff1b\u53ef\u91cd\u8bd5\u6216\u538b\u7f29\u56fe\u7247\u540e\u518d\u8bd5\u3002<\/li>\n\n\n\n<li><strong>417 \u56fe\u7247\u4e2d\u4eba\u8138\u8fc7\u5927&#8230;<\/strong>\uff1a\u5728\u4eba\u8138\u6bd4\u4f8b\u4e0a\u9650\u4e0b\u4ecd\u65e0\u6cd5\u6ee1\u8db3\u76ee\u6807\u89c4\u683c\u3002\u8be5\u9519\u8bef\u7801\u5305\u542b\u4ee5\u4e0b\u7ec6\u5206\u63d0\u793a\uff0c\u8bf7\u6839\u636e\u5177\u4f53\u63d0\u793a\u8c03\u6574\uff1a\n<ul class=\"wp-block-list\">\n<li><code>\u4eba\u8138\u5728\u753b\u9762\u4e2d\u5360\u6bd4\u8fc7\u5927\uff08\u8138\u5bbd\u8d85\u51fa\u6700\u5927\u6bd4\u4f8b\uff09\uff0c\u8bf7\u8fdc\u79bb\u955c\u5934\u6216\u7559\u767d\u66f4\u591a<\/code><\/li>\n\n\n\n<li><code>\u5934\u90e8\u9ad8\u5ea6\u5360\u6bd4\u8fc7\u5927\uff0c\u8bf7\u8fdc\u79bb\u955c\u5934\u6216\u7559\u767d\u66f4\u591a<\/code><\/li>\n\n\n\n<li><code>\u53cc\u773c\u95f4\u8ddd\u5360\u6bd4\u8fc7\u5927\uff08\u8ddd\u79bb\u955c\u5934\u8fc7\u8fd1\uff09\uff0c\u8bf7\u8fdc\u79bb\u955c\u5934\u6216\u7559\u767d\u66f4\u591a<\/code><\/li>\n\n\n\n<li><code>\u88c1\u526a\u8303\u56f4\u8d85\u51fa\u56fe\u7247\u8fb9\u754c\uff08\u7559\u767d\u4e0d\u8db3\uff09\uff0c\u8bf7\u8fdc\u79bb\u955c\u5934\u6216\u66f4\u6362\u8fb9\u8ddd\u66f4\u5927\u7684\u7167\u7247<\/code><\/li>\n\n\n\n<li><code>\u56fe\u7247\u4e2d\u4eba\u8138\u8fc7\u5927\uff0c\u65e0\u6cd5\u5236\u4f5c\u8be5\u89c4\u683c\u7684\u8bc1\u4ef6\u7167\uff0c\u8bf7\u4fdd\u6301\u9002\u5f53\u8ddd\u79bb\u91cd\u65b0\u62cd\u6444<\/code><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>433 \u4eba\u8138\u5173\u952e\u70b9\u68c0\u6d4b\u5931\u8d25&#8230;<\/strong>\uff1a\u4eba\u8138\u5173\u952e\u70b9\u89e3\u6790\u5931\u8d25\uff0c\u8bf7\u66f4\u6362\u7167\u7247\u540e\u91cd\u65b0\u5c1d\u8bd5\u3002<\/li>\n<\/ul>\n\n\n\n<p>\u63d0\u793a\uff1a402 API\u70b9\u6570\u4e0d\u8db3\u901a\u5e38\u53d1\u751f\u5728\u4e0b\u8f7d\u65e0\u6c34\u5370\u56fe\u7247\u65f6\uff0c\u975e\u5236\u4f5c\u9519\u8bef\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"\u56fe\u7247\u8bbf\u95eeurl\">\u56fe\u7247\u8bbf\u95eeURL<\/h2>\n\n\n\n<p>\uff08\u4ee5\u4e0b\u4e3a\u8def\u5f84\uff0c\u5b9e\u9645\u8bbf\u95ee\u8bf7\u52a0\u524d\u7f00&nbsp;<code>https:\/\/www.clipimg.com\/api<\/code>\uff09<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"\u9884\u89c8\u56fe\u7247\">\u9884\u89c8\u56fe\u7247<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u7535\u5b50\u7167\u9884\u89c8<\/strong>:&nbsp;<code>\/idphoto\/preview\/{preview_img_name}<\/code><\/li>\n\n\n\n<li><strong>\u6392\u7248\u7167\u9884\u89c8<\/strong>:&nbsp;<code>\/idphoto\/print_preview\/{preview_print_img_name}<\/code><\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"\u4e0b\u8f7d\u56fe\u7247\">\u4e0b\u8f7d\u56fe\u7247<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>\u7535\u5b50\u7167\u4e0b\u8f7d<\/strong>:&nbsp;<code>\/idphoto\/download\/{img_name}<\/code>\uff08\u9700\u8981POST\u4e0eAPIKEY\u9a8c\u8bc1\uff1b\u4e0b\u8f7d\u65e0\u6c34\u5370\u56fe\u7247\u4f1a\u6d88\u8017\u70b9\u6570\uff09<\/li>\n\n\n\n<li><strong>\u6392\u7248\u7167\u4e0b\u8f7d<\/strong>:&nbsp;<code>\/idphoto\/print_download\/{print_img_name}<\/code>\uff08\u9700\u8981POST\u4e0eAPIKEY\u9a8c\u8bc1\uff1b\u4e0b\u8f7d\u65e0\u6c34\u5370\u56fe\u7247\u4f1a\u6d88\u8017\u70b9\u6570\uff09<\/li>\n<\/ul>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"\u6263\u70b9\u89c4\u5219\u8bf4\u660e\">\u6263\u70b9\u89c4\u5219\u8bf4\u660e<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"api\u70b9\u6570\u6d88\u8017\u89c4\u5219\">API\u70b9\u6570\u6d88\u8017\u89c4\u5219<\/h3>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong><code>\/make<\/code>&nbsp;\u63a5\u53e3<\/strong>\uff1a\u8c03\u7528\u4e0d\u6d88\u8017\u70b9\u6570\uff1b\u4e0b\u8f7d\u201c\u65e0\u6c34\u5370\u539f\u56fe\u201d\u6263 30 \u70b9\/\u6b21\uff1b\u4e0b\u8f7d\u201c\u65e0\u6c34\u5370\u6392\u7248\u7167\u201d\u6263 50 \u70b9\/\u6b21\u3002<\/li>\n\n\n\n<li><strong><code>\/check<\/code>&nbsp;\u63a5\u53e3<\/strong>\uff1a\u8c03\u7528\u5373\u6263 1 \u70b9\/\u6b21\uff08\u72ec\u7acb\u68c0\u6d4b\u6536\u8d39\uff09\u3002<\/li>\n\n\n\n<li><strong><code>\/make_and_check<\/code>&nbsp;\u63a5\u53e3<\/strong>\uff1a\u8c03\u7528\u4e0d\u6d88\u8017\u70b9\u6570\uff1b\u4e0b\u8f7d\u201c\u65e0\u6c34\u5370\u539f\u56fe\u201d\u6263 50 \u70b9\/\u6b21\uff1b\u4e0b\u8f7d\u201c\u65e0\u6c34\u5370\u6392\u7248\u7167\u201d\u6263 50 \u70b9\/\u6b21\u3002<\/li>\n<\/ul>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"\u7ed3\u679c\u4fdd\u7559\u8bf4\u660e\">\u7ed3\u679c\u4fdd\u7559\u8bf4\u660e<\/h3>\n\n\n\n<p>\u5236\u4f5c\u7ed3\u679c\u4fdd\u75591\u5c0f\u65f6\uff0c1\u5c0f\u65f6\u540e\u81ea\u52a8\u5220\u9664\u5236\u4f5c\u7ed3\u679c\u56fe\u7247\uff0c\u8bf7\u53ca\u65f6\u4fdd\u5b58\u3002\u91cd\u590d\u4e0b\u8f7d\u540c\u4e00\u5f20\u7167\u7247\u4e0d\u4f1a\u91cd\u590d\u6263\u8d39\u3002<\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"\u5178\u578b\u573a\u666f\u53c2\u6570\">\u5178\u578b\u573a\u666f\u53c2\u6570<\/h2>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"1-\u57fa\u7840\u8bc1\u4ef6\u7167\u5236\u4f5c\">1. \u57fa\u7840\u8bc1\u4ef6\u7167\u5236\u4f5c<\/h3>\n\n\n\n<p>\u4ec5\u63d0\u4f9b\u57fa\u7840\u53c2\u6570\uff0c\u9002\u5408\u4e00\u822c\u7528\u6237\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{\n  \"width\": 295,\n  \"height\": 413,\n  \"fair_level\": 0.3\n}\n<\/code><\/pre>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"2-\u81ea\u5b9a\u4e49\u89c4\u683c\u8bc1\u4ef6\u7167\">2. \u81ea\u5b9a\u4e49\u89c4\u683c\u8bc1\u4ef6\u7167<\/h3>\n\n\n\n<p>\u4f7f\u7528spec_id\u9884\u8bbe\u53c2\u6570\uff0c\u51cf\u5c11\u53c2\u6570\u914d\u7f6e\uff1a<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code>{\n  \"spec_id\": 1,\n  \"fair_level\": 0.3\n}\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"\u5f00\u53d1\u5efa\u8bae\">\u5f00\u53d1\u5efa\u8bae<\/h2>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u9519\u8bef\u5904\u7406<\/strong>: \u5efa\u8bae\u5bf9\u5404\u79cd\u72b6\u6001\u7801\u8fdb\u884c\u5b8c\u6574\u7684\u9519\u8bef\u5904\u7406<\/li>\n\n\n\n<li><strong>\u53c2\u6570\u6821\u9a8c<\/strong>: \u5728\u53d1\u9001\u8bf7\u6c42\u524d\u5bf9\u53c2\u6570\u8fdb\u884c\u672c\u5730\u6821\u9a8c<\/li>\n\n\n\n<li><strong>\u56fe\u7247\u4f18\u5316<\/strong>: \u5efa\u8bae\u5728\u4e0a\u4f20\u524d\u5bf9\u56fe\u7247\u8fdb\u884c\u9002\u5f53\u538b\u7f29<\/li>\n\n\n\n<li><strong>\u7f13\u5b58\u7b56\u7565<\/strong>: \u53ef\u4ee5\u7f13\u5b58\u5236\u4f5c\u6210\u529f\u7684\u56fe\u7247\uff0c\u907f\u514d\u91cd\u590d\u5236\u4f5c<\/li>\n<\/ol>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"\u4f7f\u7528\u4ee3\u7801\u5b9e\u73b0\u8bc1\u4ef6\u7167\u6392\u7248\">\u4f7f\u7528\u4ee3\u7801\u5b9e\u73b0\u8bc1\u4ef6\u7167\u6392\u7248<\/h2>\n\n\n\n<p>\u60a8\u53ef\u4ee5\u4f7f\u7528\u4ee3\u7801\u5bf9\u4e0b\u8f7d\u540e\u7684\u8bc1\u4ef6\u7167\u5b9e\u73b0\u6392\u7248\uff0c\u4ee5\u8282\u7701\u6210\u672c\uff01<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"python-\u793a\u4f8b\">Python \u793a\u4f8b<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>from PIL import Image, ImageDraw\n\n# 6 \u5bf8\u76f8\u7eb8\u5c3a\u5bf8\uff08\u82f1\u5bf8\uff09\nSIX_INCH_WIDTH = 6.0\nSIX_INCH_HEIGHT = 4.0\n# \u9ed8\u8ba4\u5206\u8fa8\u7387\uff08dpi\uff09\nDEFAULT_DPI = 300\n# \u7167\u7247\u95f4\u7a7a\u9699\uff08\u50cf\u7d20\uff09\nGAP = 10\n# \u88c1\u526a\u7ebf\u989c\u8272\nCUTLINE_COLOR = (0, 0, 0)\n# \u88c1\u526a\u7ebf\u5bbd\u5ea6\nCUTLINE_WIDTH = 1\n\n# \u8f6c\u6362\u4e3a\u50cf\u7d20\nSIX_INCH_PIXEL_WIDTH = int(SIX_INCH_WIDTH * DEFAULT_DPI)\nSIX_INCH_PIXEL_HEIGHT = int(SIX_INCH_HEIGHT * DEFAULT_DPI)\n\n\ndef layout_photos(photo_path, output_path):\n    # \u6253\u5f00\u7167\u7247\n    photo = Image.open(photo_path)\n    photo_width, photo_height = photo.size\n    try:\n        photo_dpi = photo.info&#91;'dpi']&#91;0]\n        if photo_dpi == 0:\n            photo_dpi = DEFAULT_DPI\n    except KeyError:\n        photo_dpi = DEFAULT_DPI\n\n    # \u8ba1\u7b97\u7167\u7247\u5b9e\u9645\u6253\u5370\u5c3a\u5bf8\uff08\u82f1\u5bf8\uff09\n    photo_print_width = photo_width \/ photo_dpi\n    photo_print_height = photo_height \/ photo_dpi\n\n    # \u8f6c\u6362\u4e3a\u50cf\u7d20\uff08\u4f7f\u7528\u9ed8\u8ba4 dpi\uff09\n    photo_pixel_width = int(photo_print_width * DEFAULT_DPI)\n    photo_pixel_height = int(photo_print_height * DEFAULT_DPI)\n\n    # \u8c03\u6574\u7167\u7247\u5927\u5c0f\n    resized_photo = photo.resize((photo_pixel_width, photo_pixel_height))\n\n    # \u521b\u5efa\u76f8\u7eb8\n    paper = Image.new('RGB', (SIX_INCH_PIXEL_WIDTH, SIX_INCH_PIXEL_HEIGHT), 'white')\n    draw = ImageDraw.Draw(paper)\n\n    # \u8ba1\u7b97\u6bcf\u884c\u548c\u6bcf\u5217\u53ef\u653e\u7f6e\u7684\u7167\u7247\u6570\u91cf\n    cols = (SIX_INCH_PIXEL_WIDTH + GAP) \/\/ (photo_pixel_width + GAP)\n    rows = (SIX_INCH_PIXEL_HEIGHT + GAP) \/\/ (photo_pixel_height + GAP)\n\n    # \u8ba1\u7b97\u6392\u7248\u7684\u603b\u5bbd\u5ea6\u548c\u9ad8\u5ea6\n    total_width = cols * photo_pixel_width + (cols - 1) * GAP\n    total_height = rows * photo_pixel_height + (rows - 1) * GAP\n\n    # \u8ba1\u7b97\u5c45\u4e2d\u504f\u79fb\u91cf\n    start_x = (SIX_INCH_PIXEL_WIDTH - total_width) \/\/ 2\n    start_y = (SIX_INCH_PIXEL_HEIGHT - total_height) \/\/ 2\n\n    # \u7c98\u8d34\u7167\u7247\n    for i in range(rows):\n        for j in range(cols):\n            x = start_x + j * (photo_pixel_width + GAP)\n            y = start_y + i * (photo_pixel_height + GAP)\n            paper.paste(resized_photo, (x, y))\n\n    # \u7ed8\u5236\u5782\u76f4\u88c1\u526a\u7ebf\uff08\u95f4\u9699\u4e24\u8fb9\uff09\n    for j in range(cols + 1):\n        if j == 0:\n            left_x1 = start_x\n            draw.line((left_x1, 0, left_x1, start_y), fill=CUTLINE_COLOR, width=CUTLINE_WIDTH)\n            draw.line((left_x1, start_y + total_height, left_x1, SIX_INCH_PIXEL_HEIGHT), fill=CUTLINE_COLOR, width=CUTLINE_WIDTH)\n        elif j == cols:\n            left_x2 = start_x + total_width\n            draw.line((left_x2, 0, left_x2, start_y), fill=CUTLINE_COLOR, width=CUTLINE_WIDTH)\n            draw.line((left_x2, start_y + total_height, left_x2, SIX_INCH_PIXEL_HEIGHT), fill=CUTLINE_COLOR, width=CUTLINE_WIDTH)\n        else:\n            left_x1 = start_x + (j - 1) * (photo_pixel_width + GAP) + photo_pixel_width\n            left_x2 = left_x1 + GAP\n            draw.line((left_x1, 0, left_x1, start_y), fill=CUTLINE_COLOR, width=CUTLINE_WIDTH)\n            draw.line((left_x1, start_y + total_height, left_x1, SIX_INCH_PIXEL_HEIGHT), fill=CUTLINE_COLOR, width=CUTLINE_WIDTH)\n            draw.line((left_x2, 0, left_x2, start_y), fill=CUTLINE_COLOR, width=CUTLINE_WIDTH)\n            draw.line((left_x2, start_y + total_height, left_x2, SIX_INCH_PIXEL_HEIGHT), fill=CUTLINE_COLOR, width=CUTLINE_WIDTH)\n\n    # \u7ed8\u5236\u6c34\u5e73\u88c1\u526a\u7ebf\uff08\u95f4\u9699\u4e24\u8fb9\uff09\n    for i in range(rows + 1):\n        if i == 0:\n            top_y1 = start_y\n            draw.line((0, top_y1, start_x, top_y1), fill=CUTLINE_COLOR, width=CUTLINE_WIDTH)\n            draw.line((start_x + total_width, top_y1, SIX_INCH_PIXEL_WIDTH, top_y1), fill=CUTLINE_COLOR, width=CUTLINE_WIDTH)\n        elif i == rows:\n            top_y2 = start_y + total_height\n            draw.line((0, top_y2, start_x, top_y2), fill=CUTLINE_COLOR, width=CUTLINE_WIDTH)\n            draw.line((start_x + total_width, top_y2, SIX_INCH_PIXEL_WIDTH, top_y2), fill=CUTLINE_COLOR, width=CUTLINE_WIDTH)\n        else:\n            top_y1 = start_y + (i - 1) * (photo_pixel_height + GAP) + photo_pixel_height\n            top_y2 = top_y1 + GAP\n            draw.line((0, top_y1, start_x, top_y1), fill=CUTLINE_COLOR, width=CUTLINE_WIDTH)\n            draw.line((start_x + total_width, top_y1, SIX_INCH_PIXEL_WIDTH, top_y1), fill=CUTLINE_COLOR, width=CUTLINE_WIDTH)\n            draw.line((0, top_y2, start_x, top_y2), fill=CUTLINE_COLOR, width=CUTLINE_WIDTH)\n            draw.line((start_x + total_width, top_y2, SIX_INCH_PIXEL_WIDTH, top_y2), fill=CUTLINE_COLOR, width=CUTLINE_WIDTH)\n\n    paper.save(output_path)\n\n\n# \u793a\u4f8b\u8c03\u7528\n# layout_photos('your_photo.jpg', 'layout_photo.jpg')\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"\u4f7f\u7528\u4ee3\u7801\u7ed9\u8bc1\u4ef6\u7167\u6dfb\u52a0\u81ea\u5b9a\u4e49\u6587\u5b57\">\u4f7f\u7528\u4ee3\u7801\u7ed9\u8bc1\u4ef6\u7167\u6dfb\u52a0\u81ea\u5b9a\u4e49\u6587\u5b57<\/h2>\n\n\n\n<p>\u8865\u5145\u8bf4\u660e\uff1a\u5728\u8bc1\u4ef6\u7167\u9884\u89c8\\\u4e0b\u8f7d\u3001\u6392\u7248\u7167\u9884\u89c8\\\u4e0b\u8f7d\u3001\u6362\u88c5\u7167\u9884\u89c8\\\u4e0b\u8f7d\u63a5\u53e3\u6dfb\u52a0\u53c2\u6570text=<code>\u81ea\u5b9a\u4e49\u6587\u5b57<\/code>\uff0c\u53ef\u5b9e\u73b0\u5bf9\u8bc1\u4ef6\u7167\u6dfb\u52a0\u81ea\u5b9a\u4e49\u6587\u5b57\u7684\u529f\u80fd\uff0c\u4f46\u662f\u5efa\u8bae\u5f00\u53d1\u8005\u81ea\u5df1\u4f7f\u7528\u4ee3\u7801\u6dfb\u52a0\u6587\u5b57\u66f4\u5177\u7075\u6d3b\u6027\uff0c\u540e\u671f\u53ef\u80fd\u4f1a\u4e0b\u7ebf\u8be5\u529f\u80fd\uff0c\u63a8\u8350\u4f7f\u7528\u4ee5\u4e0b\u4ee3\u7801\u5b9e\u73b0\u3002<\/p>\n\n\n\n<p><strong>\u53c2\u6570\u540d<\/strong>:&nbsp;<code>text<\/code><br><strong>\u7c7b\u578b<\/strong>:&nbsp;<code>string<\/code><br><strong>\u5fc5\u586b<\/strong>: \u5426<br><strong>\u8bf4\u660e<\/strong>: \u81ea\u5b9a\u4e49\u6587\u5b57\u5185\u5bb9\u3002\u82e5\u4f20\u5165\u8be5\u53c2\u6570\uff0c\u7cfb\u7edf\u5c06\u5728\u56fe\u7247\u5e95\u90e8\u589e\u52a0\u767d\u8272\u80cc\u666f\u533a\u57df\uff0c\u5e76\u5c06\u6587\u5b57\u5c45\u4e2d\u7ed8\u5236\u5728\u5176\u4e2d\u3002<\/p>\n\n\n\n<p><strong>\u652f\u6301\u63a5\u53e3\u4e0e\u884c\u4e3a\u7ec6\u8282<\/strong>:<\/p>\n\n\n\n<ol class=\"wp-block-list\">\n<li><strong>\u8bc1\u4ef6\u7167\u9884\u89c8\/\u4e0b\u8f7d<\/strong>\n<ul class=\"wp-block-list\">\n<li>\u5bf9\u5e94\u63a5\u53e3\u5730\u5740:&nbsp;<code>\/idphoto\/preview\/{preview_img_name}<\/code>,&nbsp;<code>\/idphoto\/download\/{img_name}<\/code><\/li>\n\n\n\n<li><strong>\u884c\u4e3a<\/strong>: \u5728\u751f\u6210\u7684\u5355\u5f20\u8bc1\u4ef6\u7167\u5e95\u90e8\u6dfb\u52a0\u81ea\u5b9a\u4e49\u6587\u5b57\u3002<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u6392\u7248\u7167\u9884\u89c8\/\u4e0b\u8f7d<\/strong>\n<ul class=\"wp-block-list\">\n<li>\u5bf9\u5e94\u63a5\u53e3\u5730\u5740:&nbsp;<code>\/idphoto\/print_preview\/{preview_print_img_name}<\/code>,&nbsp;<code>\/idphoto\/print_download\/{print_img_name}<\/code><\/li>\n\n\n\n<li><strong>\u884c\u4e3a<\/strong>:&nbsp;<strong>\u5148\u6dfb\u52a0\u6587\u5b57\uff0c\u540e\u6392\u7248<\/strong>\u3002\u5373\u5148\u5728\u5355\u5f20\u8bc1\u4ef6\u7167\u5e95\u90e8\u6dfb\u52a0\u6587\u5b57\uff0c\u7136\u540e\u518d\u5c06\u5e26\u6709\u6587\u5b57\u7684\u7167\u7247\u8fdb\u884c\u6392\u7248\u7ec4\u5408\u3002\u6700\u7ec8\u751f\u6210\u7684\u6392\u7248\u7167\u4e2d\uff0c\u6bcf\u4e00\u5f20\u5c0f\u7167\u7247\u5e95\u90e8\u90fd\u4f1a\u5305\u542b\u8be5\u6587\u5b57\u3002<\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>\u6362\u88c5\u7167\u9884\u89c8\/\u4e0b\u8f7d<\/strong>\n<ul class=\"wp-block-list\">\n<li>\u5bf9\u5e94\u63a5\u53e3\u5730\u5740:&nbsp;<code>\/idphoto\/change_clothes\/preview\/{preview_img_name}<\/code>,&nbsp;<code>\/idphoto\/change_clothes\/download\/{img_name}<\/code><\/li>\n\n\n\n<li><strong>\u884c\u4e3a<\/strong>: \u5728\u6362\u88c5\u5b8c\u6210\u540e\u7684\u8bc1\u4ef6\u7167\u5e95\u90e8\u6dfb\u52a0\u81ea\u5b9a\u4e49\u6587\u5b57\u3002<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n\n\n\n<p><strong>\u8c03\u7528\u65b9\u5f0f<\/strong>:<\/p>\n\n\n\n<ul class=\"wp-block-list\">\n<li><strong>GET \u8bf7\u6c42<\/strong>&nbsp;(\u9884\u89c8\u63a5\u53e3): \u62fc\u63a5\u5728 URL \u53c2\u6570\u4e2d\uff0c\u9700\u8fdb\u884c URL \u7f16\u7801\u3002\n<ul class=\"wp-block-list\">\n<li>\u793a\u4f8b:&nbsp;<code>...\/preview\/xxx.jpg?text=%E5%BC%A0%E4%B8%89<\/code><\/li>\n<\/ul>\n<\/li>\n\n\n\n<li><strong>POST \u8bf7\u6c42<\/strong>&nbsp;(\u4e0b\u8f7d\u63a5\u53e3): \u5305\u542b\u5728 JSON \u8bf7\u6c42\u4f53\u4e2d\u3002\n<ul class=\"wp-block-list\">\n<li>\u793a\u4f8b:&nbsp;<code>{\"text\": \"\u5f20\u4e09\", ...}<\/code><\/li>\n<\/ul>\n<\/li>\n<\/ul>\n\n\n\n<p>\u60a8\u53ef\u4ee5\u4f7f\u7528\u4ee3\u7801\u7ed9\u8bc1\u4ef6\u7167\u5e95\u90e8\u6dfb\u52a0\u81ea\u5b9a\u4e49\u6587\u5b57\uff08\u4f8b\u5982\u59d3\u540d\u3001\u8eab\u4efd\u8bc1\u53f7\u7b49\uff09\u3002<\/p>\n\n\n\n<h3 class=\"wp-block-heading\" id=\"python-\u793a\u4f8b-1\">Python \u793a\u4f8b<\/h3>\n\n\n\n<pre class=\"wp-block-code\"><code>from PIL import Image, ImageDraw, ImageFont\nimport math\n\ndef add_text_to_image(image_path, output_path, text):\n    # \u6253\u5f00\u56fe\u7247\n    img = Image.open(image_path)\n    img_width, img_height = img.size\n    \n    # \u52a0\u8f7d\u5b57\u4f53 (\u8bf7\u786e\u4fdd\u7cfb\u7edf\u4e2d\u6709\u8be5\u5b57\u4f53\u6587\u4ef6\uff0c\u6216\u6307\u5b9a\u5b57\u4f53\u8def\u5f84)\n    # \u5b57\u4f53\u5927\u5c0f\u6839\u636e\u56fe\u7247\u9ad8\u5ea6\u52a8\u6001\u8ba1\u7b97\uff0c\u7ea6\u4e3a\u9ad8\u5ea6\u7684 1\/24\n    font_size = math.ceil(img_height \/ 24)\n    try:\n        # Windows\u7cfb\u7edf\u901a\u5e38\u6709 SimHei.ttf\uff0cLinux\u53ef\u80fd\u9700\u8981\u6307\u5b9a\u5176\u4ed6\u4e2d\u6587\u5b57\u4f53\u8def\u5f84\n        font = ImageFont.truetype('SimHei.ttf', font_size)\n    except IOError:\n        print(\"\u672a\u627e\u5230 SimHei.ttf\uff0c\u5c1d\u8bd5\u4f7f\u7528\u9ed8\u8ba4\u5b57\u4f53\")\n        font = ImageFont.load_default()\n        \n    # \u8ba1\u7b97\u6587\u5b57\u5bbd\u9ad8\n    bbox = font.getbbox(text)\n    text_width = bbox&#91;2]\n    text_height = bbox&#91;3]\n\n    # \u521b\u5efa\u65b0\u7684\u80cc\u666f\u56fe\uff0c\u9ad8\u5ea6\u589e\u52a0\u4ee5\u5bb9\u7eb3\u6587\u5b57 (\u6587\u5b57\u9ad8\u5ea6 + 6\u50cf\u7d20\u95f4\u8ddd)\n    new_height = img_height + text_height + 6\n    # \u521b\u5efa\u767d\u5e95\u80cc\u666f\n    new_img = Image.new(\"RGB\", (img_width, new_height), \"white\")\n    \n    # \u5c06\u539f\u56fe\u7c98\u8d34\u5230\u9876\u90e8\n    new_img.paste(img, (0, 0))\n    \n    draw = ImageDraw.Draw(new_img)\n    \n    # \u8ba1\u7b97\u6587\u5b57\u5c45\u4e2d\u4f4d\u7f6e\n    x = math.ceil((img_width - text_width) \/ 2)\n    y = img_height + 3\n    \n    # \u7ed8\u5236\u6587\u5b57 (\u9ed1\u8272)\n    draw.text((x, y), text, fill=(0, 0, 0), font=font)\n    \n    # \u4fdd\u5b58\u56fe\u7247\n    new_img.save(output_path)\n\n# \u793a\u4f8b\u8c03\u7528\n# add_text_to_image('idphoto.jpg', 'idphoto_with_text.jpg', '\u5f20\u4e09 110101199001011234')\n<\/code><\/pre>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"\u8bc1\u4ef6\u7167\u89c4\u683c\u5217\u8868\">\u8bc1\u4ef6\u7167\u89c4\u683c\u5217\u8868<\/h2>\n\n\n\n<p>\u5982\u9700\u5168\u90e8\u89c4\u683c\u5217\u8868\u6570\u636e\uff0c\u8bf7\u54a8\u8be2\u5ba2\u670d\u83b7\u53d6\u3002<\/p>\n\n\n\n<figure class=\"wp-block-table\"><table class=\"has-fixed-layout\"><thead><tr><th>id<\/th><th>name<\/th><\/tr><\/thead><tbody><tr><td>1<\/td><td>\u4e00\u5bf8<\/td><\/tr><tr><td>2<\/td><td>\u5c0f\u4e00\u5bf8<\/td><\/tr><tr><td>3<\/td><td>\u5927\u4e00\u5bf8<\/td><\/tr><tr><td>4<\/td><td>\u4e8c\u5bf8<\/td><\/tr><tr><td>5<\/td><td>\u5c0f\u4e8c\u5bf8<\/td><\/tr><tr><td>6<\/td><td>\u4e09\u5bf8<\/td><\/tr><tr><td>7<\/td><td>\u4e94\u5bf8<\/td><\/tr><tr><td>8<\/td><td>\u56fd\u8003\uff08\u4e8c\u5bf8\uff09(35*45mm)<\/td><\/tr><tr><td>9<\/td><td>\u82f1\u8bed\u56db\u516d\u7ea7\u8003\u8bd5\uff08144\u00d7192\uff0c0~10kb\uff09(12*16mm)<\/td><\/tr><tr><td>10<\/td><td>\u5168\u56fd\u8ba1\u7b97\u673a\u7b49\u7ea7\u8003\u8bd5(12*16mm)<\/td><\/tr><\/tbody><\/table><\/figure>\n\n\n\n<p><\/p>\n\n\n\n<h2 class=\"wp-block-heading\" id=\"\u76f8\u5173\u63a8\u8350\">\u76f8\u5173\u63a8\u8350<\/h2>\n\n\n\n<ul class=\"wp-block-list\">\n<li><a href=\"https:\/\/www.clipimg.com\/wp\/docs\/idphoto_make_and_check\/\" title=\"\u8bc1\u4ef6\u7167\u5236\u4f5c+\u68c0\u6d4b\u63a5\u53e3 API\u6587\u6863\">\u8bc1\u4ef6\u7167\u5236\u4f5c\u5e76\u68c0\u6d4bAPI\u6587\u6863<\/a>\uff1a\u5236\u4f5c\u540c\u65f6\u8fdb\u884c\u5408\u89c4\u6027\u68c0\u6d4b\u3002<\/li>\n\n\n\n<li><a href=\"https:\/\/www.clipimg.com\/wp\/docs\/change_clothes\/\" title=\"\u8bc1\u4ef6\u7167\u6362\u88c5API\u6587\u6863\">\u8bc1\u4ef6\u7167\u6362\u88c5\u63a5\u53e3\u6587\u6863<\/a>\uff1a\u8bc1\u4ef6\u7167\u667a\u80fd\u6362\u88c5\u3002<\/li>\n<\/ul>\n\n\n\n<p><\/p>\n","protected":false},"excerpt":{"rendered":"<p>\u53ef\u7acb\u56fe ClipImg \u8bc1\u4ef6\u7167\u5236\u4f5c API \u670d\u52a1 \u63a5\u53e3\u6982\u8ff0 \u672c\u63a5\u53e3\u63d0\u4f9b\u4e00\u7ad9\u5f0f\u7684\u8bc1\u4ef6\u7167\u667a\u80fd\u5236\u4f5c\u670d\u52a1\uff0c\u80fd\u591f\u5c06\u7528\u6237\u4e0a&#8230;<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","template":"","meta":{"_kad_post_transparent":"","_kad_post_title":"","_kad_post_layout":"","_kad_post_sidebar_id":"","_kad_post_content_style":"","_kad_post_vertical_padding":"","_kad_post_feature":"","_kad_post_feature_position":"","_kad_post_header":false,"_kad_post_footer":false,"footnotes":""},"doc_category":[18],"doc_tag":[],"class_list":["post-1852","docs","type-docs","status-publish","hentry","doc_category-api-doc"],"aioseo_notices":[],"year_month":"2026-04","word_count":2200,"total_views":0,"reactions":{"happy":0,"normal":0,"sad":0},"author_info":{"name":"admin","author_nicename":"admin","author_url":"https:\/\/www.clipimg.com\/wp\/author\/admin\/"},"doc_category_info":[{"term_name":"\u53ef\u7acb\u56feAPI\u6587\u6863","term_url":"https:\/\/www.clipimg.com\/wp\/docs-category\/api-doc\/"}],"doc_tag_info":[],"_links":{"self":[{"href":"https:\/\/www.clipimg.com\/wp\/wp-json\/wp\/v2\/docs\/1852","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.clipimg.com\/wp\/wp-json\/wp\/v2\/docs"}],"about":[{"href":"https:\/\/www.clipimg.com\/wp\/wp-json\/wp\/v2\/types\/docs"}],"author":[{"embeddable":true,"href":"https:\/\/www.clipimg.com\/wp\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.clipimg.com\/wp\/wp-json\/wp\/v2\/comments?post=1852"}],"version-history":[{"count":64,"href":"https:\/\/www.clipimg.com\/wp\/wp-json\/wp\/v2\/docs\/1852\/revisions"}],"predecessor-version":[{"id":3731,"href":"https:\/\/www.clipimg.com\/wp\/wp-json\/wp\/v2\/docs\/1852\/revisions\/3731"}],"wp:attachment":[{"href":"https:\/\/www.clipimg.com\/wp\/wp-json\/wp\/v2\/media?parent=1852"}],"wp:term":[{"taxonomy":"doc_category","embeddable":true,"href":"https:\/\/www.clipimg.com\/wp\/wp-json\/wp\/v2\/doc_category?post=1852"},{"taxonomy":"doc_tag","embeddable":true,"href":"https:\/\/www.clipimg.com\/wp\/wp-json\/wp\/v2\/doc_tag?post=1852"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}