阿里云图像搜索完整对接指南:从开通到API/SDK深度集成

简介: 本文系统性地讲解了阿里云图像搜索(Image Search)服务的完整对接流程与使用方法。文章首先介绍了图像搜索的核心概念——以深度学习和机器视觉技术为基础,通过提取图片内容特征实现相似性检索。随后详细说明了开通服务的完整步骤,包括账号注册、实名认证、AccessKey获取以及购买实例时的关键配置项(地域、服务类型、QPS、最大容量等)。接着深入讲解了控制台的核心操作:实例创建、图片新增(含商品ID、图片名称、主体识别等参数)、以及相似图片搜索(SearchByPic与SearchByName两种模式)。在技术对接层面,文章提供了Java SDK与Python SDK的完整代码示例,涵盖Add

1. 图像搜索:是什么,能做什么

图像搜索(Image Search)是阿里云推出的一款以深度学习和机器视觉技术为核心的平台型产品。它的工作原理并不复杂:系统会对入库的每一张图片提取高维视觉特征向量,并建立高效的索引结构。当用户提交一张查询图片时,服务会实时计算该图片的特征向量,然后在索引库中快速检索出特征最相似的若干张图片,按相似度分数从高到低返回。

这一技术能够支撑的业务场景非常广泛。在电商领域,最常见的应用是“拍照购物”或“找同款”——用户随手拍下心仪的商品,系统即可在商品库中精准匹配同款或相似款。在版权保护领域,通过输入疑似侵权的图片,可以在图库中快速定位被盗用的原创内容。在媒体资产管理中,输入一张示例图片即可从海量素材库中检索出视觉风格相近的图片。此外,商品推荐、相似图片推荐等场景也是图像搜索的典型用武之地。

阿里云图像搜索目前主要提供两大服务类型:商品图片搜索通用图片搜索。商品图片搜索专注于电商场景,针对商品主体进行特征提取和匹配,对每个商品类目进行更精细化的特征提取,使得召回更加准确;通用图片搜索则适用于版权保护、相似图片推荐等更广泛的场景,不需要关注具体的类目信息。需要特别注意的是,服务类型在创建实例时选定后不可更改,因此务必要根据实际业务需求做出正确的选择。

从产品能力来看,图像搜索具备搜索精度高、响应速度快(毫秒级)、支持百亿级数据规模、实时增删改查等突出优势。同时,阿里云对客户数据采用非对称加密策略,结合权限控制保障数据安全。

需要先登录阿里云控制台,点击:阿里云控制台

2. 开通服务与创建实例

2.1 前提条件

在使用图像搜索服务之前,需要完成以下几个准备工作:

  • 注册阿里云账号:如尚未注册,可通过阿里云官网完成注册流程。
  • 完成实名认证:个人或企业实名认证均可。
  • 获取AccessKey:AccessKey ID和AccessKey Secret是调用API和SDK时的身份凭证。建议通过RAM子账号创建AccessKey,避免使用主账号密钥带来的安全风险。

2.2 购买实例

完成上述准备后,即可进入图像搜索产品首页,单击“立即购买”进入实例购买页面。购买时需要配置以下关键参数:

  • 地域:图像搜索服务所在的地理区域。目前国际站支持新加坡、中国(香港)、日本(东京)和德国(法兰克福)等地。地域一旦选定不可更改,建议选择与您的应用服务器(如ECS)相同的地域,以便后续使用内网VPC访问,获得更低的延迟和更好的稳定性。
  • 服务类型:选择“商品图片搜索”或“通用图片搜索”。此选项一旦选定不可更换,请谨慎选择。
  • 访问频次(QPS):每秒允许向图像搜索服务发起的最大请求次数。例如购买QPS为5的实例,意味着每秒钟最多可以进行5次图片查询操作(删除图片操作的QPS固定为20)。QPS越高,并发处理能力越强,价格也相应更高。
  • 最大容量:您可以索引的最大图片数量。对于商品图片搜索,此处指的是图片数量而非商品数量。可选规格包括10万、250万、500万、1000万、2000万、3000万、4000万、5000万。
  • 实例名称:必填项,要求以小写字母开头,由小写字母和数字组成,长度4~20个字符。实例名称一旦确认不可修改。
  • 购买时长:购买图像搜索服务的时长,可选择是否开启到期自动续费。

在支付页面确认订单信息后,单击“去支付”。支付成功后,服务一般需要1~5分钟的开通时间,请耐心等待。

3. 控制台核心操作

实例创建成功后,即可登录图像搜索管理控制台开始使用。

3.1 实例概览

进入控制台概览页面,页面会展示各服务类型(商品图片搜索、布料图片搜索、商标图片搜索、版权图片搜索、商品多模态搜索等)的实例总数及运行状态统计,右侧提供快速入门指引。

单击实例ID或操作进入实例详情页,默认显示概述页签,展示实例基本信息(实例名称、实例ID、地域、状态、到期时间等)及套餐使用情况(最大容量、已用图片数量等)。

3.2 图片新增

单击“图片新增”Tab,进入图片新增页面。需要填写以下字段:

  • 商品ID(ProductId):必填,最多支持256个字符。一个商品可有多张图片。
  • 图片名称(PicName):必填,最多支持256个字符。ProductId + PicName唯一确定一张图片。如果多次添加图片具有相同的ProductId + PicName,以最后一次添加为准,前面添加的图片将被覆盖。
  • 上传图片:支持PNG、JPG、JPEG、BMP、GIF、WEBP、TIFF、PPM格式,图片大小不超过4MB,长宽像素须大于等于100且小于等于4096。
  • 图片主体识别:开启后选择主体识别方式(如系统自动识别)。为true时由系统进行主体识别,以识别的主体进行搜索;为false时则不进行主体识别,以整张图进行搜索。
  • 图片类目(CategoryId):选填。对于商品搜索,若设置类目则以设置的为准,若不设置类目将由系统进行类目预测。
  • 自定义内容(CustomContent):选填,最多支持4096个字符,查询时会返回该字段。
  • 整数属性(IntAttr):选填,可用于查询时过滤。
  • 字符串属性(StrAttr):选填,最多支持128个字符,可用于查询时过滤。

单击确认后,右侧返回结果中code为0、message为success表示图片新增成功。

3.3 图片搜索

单击“图片搜索”页签,进入图片搜索页面。搜索类型支持两种模式:

  • SearchByPic:使用新图片搜索相似图片。上传待搜索的图片,开启图片主体识别开关,设置返回结果数和结果起始位置等参数。
  • SearchByName:使用已入库的图片进行搜索。指定已存在的图片名称,系统在索引中查找相似图片。

右侧“原始返回结果”区域以JSON格式展示搜索响应,其中auctions数组包含匹配记录(含productId和score字段),head中返回docsFound(命中总数)、docsReturn(返回条数)和searchTime(搜索耗时)等信息。

4. 新增图片的四种方式

图像搜索服务提供四种新增图片的方式,适用于不同的业务场景:

  • 控制台图片新增:适用于功能体验和小规模测试场景,操作直观,适合快速验证。
  • API新增:通过直接调用API接口新增图片,适合需要灵活集成的场景。
  • SDK新增:适用于小规模、实时的数据增量操作,代码简洁,易于维护。
  • 批量操作:适用于较大规模(百万级)、离线数据操作,可通过批量导入功能从阿里云OSS中批量导入图片。

5. Java SDK对接详解

5.1 添加依赖

通过Maven引入图像搜索SDK依赖:

<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>imagesearch20201214</artifactId>
    <version>4.3.0</version>
</dependency>

5.2 客户端初始化

创建Config对象并配置认证信息:

import com.aliyun.imagesearch20201214.Client;
import com.aliyun.teaopenapi.models.Config;
public class ImageSearchClient {
    public static Client createClient() throws Exception {
        Config config = new Config();
        // 从环境变量获取AccessKey,强烈建议不要硬编码到代码中
        config.accessKeyId = System.getenv("CC_AK_ENV");
        config.accessKeySecret = System.getenv("CC_SK_ENV");
        config.type = "access_key";
        // 替换为您购买实例的地域
        config.regionId = "ap-southeast-1";
        config.endpoint = "imagesearch.ap-southeast-1.aliyuncs.com";
        return new Client(config);
    }
}

5.3 内网VPC访问配置

如果您的ECS实例与图像搜索实例在同一地域,可以通过内网VPC访问以获得更低的延迟:

// 内网(VPC)访问配置
config.endpointType = "internal";
config.endpoint = "imagesearch-vpc.ap-southeast-1.aliyuncs.com";

5.4 新增图片(Add接口)

Add接口用于向图像搜索实例中添加图片:

import com.aliyun.imagesearch20201214.models.AddImageAdvanceRequest;
import com.aliyun.imagesearch20201214.models.AddImageResponse;
import com.aliyun.teautil.models.RuntimeOptions;
import java.io.FileInputStream;
public class AddImageExample {
    public static void main(String[] args) throws Exception {
        Client client = ImageSearchClient.createClient();
        
        AddImageAdvanceRequest request = new AddImageAdvanceRequest();
        // 必填:实例名称(注意是实例名称不是实例ID)
        request.instanceName = "myimagesearch";
        // 必填:商品ID
        request.productId = "product_001";
        // 必填:图片名称
        request.picName = "image_001.jpg";
        // 图片内容:通过文件流传入
        FileInputStream fileStream = new FileInputStream("/path/to/image.jpg");
        request.picContentObject = fileStream;
        // 选填:图片类目
        request.categoryId = 3;
        // 选填:自定义内容
        request.customContent = "夏季新款连衣裙";
        // 选填:整数属性,可用于查询时过滤
        request.intAttr = 100;
        // 选填:字符串属性
        request.strAttr = "red";
        // 选填:是否进行主体识别,默认为true
        request.crop = true;
        
        RuntimeOptions runtime = new RuntimeOptions();
        AddImageResponse response = client.addImageAdvance(request, runtime);
        System.out.println("Response: " + response.getBody());
    }
}

5.5 图片搜索(SearchImageByPic接口)

SearchImageByPic接口用于根据图片搜索相似图片:

import com.aliyun.imagesearch20201214.models.SearchImageByPicAdvanceRequest;
import com.aliyun.imagesearch20201214.models.SearchImageByPicResponse;
import java.io.FileInputStream;
public class SearchByPicExample {
    public static void main(String[] args) throws Exception {
        Client client = ImageSearchClient.createClient();
        
        SearchImageByPicAdvanceRequest request = new SearchImageByPicAdvanceRequest();
        request.instanceName = "myimagesearch";
        FileInputStream fileStream = new FileInputStream("/path/to/query.jpg");
        request.picContentObject = fileStream;
        // 返回结果数量
        request.num = 10;
        // 结果起始位置
        request.start = 0;
        // 是否进行主体识别
        request.crop = true;
        // 可选:按字符串属性过滤
        request.strAttr = "red";
        // 可选:按整数属性过滤
        request.intAttr = 100;
        
        RuntimeOptions runtime = new RuntimeOptions();
        SearchImageByPicResponse response = client.searchImageByPicAdvance(request, runtime);
        System.out.println("Search results: " + response.getBody());
    }
}

5.6 按名称搜索(SearchImageByName接口)

SearchImageByName接口用于使用已入库的图片进行搜索:

import com.aliyun.imagesearch20201214.models.SearchImageByNameRequest;
import com.aliyun.imagesearch20201214.models.SearchImageByNameResponse;
public class SearchByNameExample {
    public static void main(String[] args) throws Exception {
        Client client = ImageSearchClient.createClient();
        
        SearchImageByNameRequest request = new SearchImageByNameRequest();
        request.instanceName = "myimagesearch";
        // 已入库图片的商品ID和图片名称
        request.productId = "product_001";
        request.picName = "image_001.jpg";
        request.num = 10;
        request.start = 0;
        
        SearchImageByNameResponse response = client.searchImageByName(request);
        System.out.println("Search results: " + response.getBody());
    }
}

5.7 删除图片(Delete接口)

import com.aliyun.imagesearch20201214.models.DeleteImageRequest;
import com.aliyun.imagesearch20201214.models.DeleteImageResponse;
public class DeleteImageExample {
    public static void main(String[] args) throws Exception {
        Client client = ImageSearchClient.createClient();
        
        DeleteImageRequest request = new DeleteImageRequest();
        request.instanceName = "myimagesearch";
        request.productId = "product_001";
        request.picName = "image_001.jpg";
        
        DeleteImageResponse response = client.deleteImage(request);
        System.out.println("Delete result: " + response.getBody());
    }
}

6. Python SDK对接详解

6.1 安装SDK

通过pip安装图像搜索Python SDK:

pip install alibabacloud_imagesearch20201214

6.2 客户端初始化

from alibabacloud_imagesearch20201214.client import Client
from alibabacloud_tea_openapi.models import Config
config = Config()
config.access_key_id = os.environ.get('CC_AK_ENV')
config.access_key_secret = os.environ.get('CC_SK_ENV')
config.type = 'access_key'
config.region_id = 'ap-southeast-1'
config.endpoint = 'imagesearch.ap-southeast-1.aliyuncs.com'
client = Client(config)

6.3 新增图片(Add接口)

Python SDK的Add接口使用AddImageAdvanceRequest:

from alibabacloud_imagesearch20201214.models import AddImageAdvanceRequest
from alibabacloud_tea_util.models import RuntimeOptions
import os
def add_image():
    request = AddImageAdvanceRequest()
    # 必填:实例名称
    request.instance_name = 'myimagesearch'
    # 必填:商品ID
    request.product_id = 'product_001'
    # 必填:图片名称
    request.pic_name = 'image_001.jpg'
    # 图片内容:通过打开文件传入
    with open('/path/to/image.jpg', 'rb') as f:
        request.pic_content_object = f
    # 选填:图片类目
    request.category_id = 3
    # 选填:自定义内容
    request.custom_content = '夏季新款连衣裙'
    # 选填:整数属性
    request.int_attr = 100
    # 选填:字符串属性
    request.str_attr = 'red'
    # 选填:是否进行主体识别
    request.crop = True
    
    runtime = RuntimeOptions()
    response = client.add_image_advance(request, runtime)
    print(response.body)
if __name__ == '__main__':
    add_image()

6.4 图片搜索(SearchImageByPic接口)

from alibabacloud_imagesearch20201214.models import SearchImageByPicAdvanceRequest
def search_by_pic():
    request = SearchImageByPicAdvanceRequest()
    request.instance_name = 'myimagesearch'
    with open('/path/to/query.jpg', 'rb') as f:
        request.pic_content_object = f
    request.num = 10
    request.start = 0
    request.crop = True
    request.str_attr = 'red'
    request.int_attr = 100
    
    runtime = RuntimeOptions()
    response = client.search_image_by_pic_advance(request, runtime)
    print(response.body)
if __name__ == '__main__':
    search_by_pic()

6.5 按名称搜索(SearchImageByName接口)

from alibabacloud_imagesearch20201214.models import SearchImageByNameRequest
def search_by_name():
    request = SearchImageByNameRequest()
    request.instance_name = 'myimagesearch'
    request.product_id = 'product_001'
    request.pic_name = 'image_001.jpg'
    request.num = 10
    request.start = 0
    
    response = client.search_image_by_name(request)
    print(response.body)
if __name__ == '__main__':
    search_by_name()

7. 高级功能与应用场景

7.1 批量操作

图像搜索支持通过批量操作功能批量导入阿里云OSS中的图片,或批量删除已经入库的图片。使用批量操作时,需要确保图像搜索实例和OSS Bucket在同一地域。具体流程包括:先将图片上传到OSS,然后通过批量操作功能引用OSS上的JSONL文件进行批量导入。

7.2 条件过滤

在图片新增和搜索时,可以通过设置属性参数实现条件过滤。支持的属性字段包括IntAttr、IntAttr2、IntAttr3、IntAttr4(整数类型属性)以及StrAttr、StrAttr2、StrAttr3、StrAttr4(字符串类型属性)。例如,在电商场景中,可以为不同站点的图片设置不同的IntAttr,查询时通过过滤来实现数据隔离。

7.3 多模态搜索

图像搜索还提供了商品多模态搜索能力,这是一种结合了文本和图像进行多模态检索的技术。它通过融合不同模态的信息,提升图像搜索的准确性和灵活性,使用户能够通过自然语言描述或图片形式快速找到目标图像。

7.4 典型应用场景

  • 电商“拍照购物”:用户上传商品照片,系统自动识别商品主体(如连衣裙、鞋子),在商品库中检索相似款式,并支持按颜色、尺码等标签进一步筛选。
  • 版权保护:通过输入疑似侵权的图片,在图库中快速定位被盗用的原创内容。
  • 内容推荐:输入一张示例图片,从海量素材库中检索出视觉风格相近的图片,用于相似内容推荐。

8. 计费说明与注意事项

8.1 计费模式

图像搜索服务采用按月(自然月)预付费资源包的计费方式。计费项只包括图片最大容量和访问频次(QPS),其余功能均免费使用。

  • 图片最大容量:用户可以索引的最大图片数量。可选规格包括10万、250万、500万、1000万、2000万、3000万、4000万、5000万。
  • 访问频次(QPS):每秒能向图像搜索服务发起的最大请求次数。可选规格包括1QPS(仅限10万图片容量)、5QPS、10QPS。删除图片操作的QPS固定为20。

8.2 重要注意事项

  • 地域不可更改:地域一旦选定不可更改,请谨慎选择。
  • 服务类型不可更改:服务类型一旦选定不可更换,请根据实际业务需求选择。
  • 实例名称不可修改:实例名称一旦确认不可修改。
  • 内网访问:内网VPC访问仅限同区域ECS或资源的访问,如果遇到调用不通,请先检查您的ECS或资源与图像搜索是否在同一个区域。
  • 图片格式要求:当前仅支持PNG、JPG、JPEG、BMP、GIF、WEBP、TIFF、PPM格式图片;图片长和宽的像素必须都大于等于100且小于等于4096;图像中不能带有旋转信息。

9. 常见问题解答

问1:商品图片搜索和通用图片搜索有什么区别?

答:商品图片搜索主要针对商品类的图片进行相关的类目划分,针对每个类目进行更精细化的特征提取,使得每个商品类目上的召回更加准确,适用的场景是电商类的应用。通用图片搜索不需要关注具体的类目信息,所有的图片均属于一个通用的类目,适用于版权保护、相似图片推荐等场景。

问2:图像搜索支持哪些图片格式?图片大小有什么限制?

答:支持PNG、JPG、JPEG、BMP、GIF、WEBP、TIFF、PPM格式图片。图片大小不超过4MB,长宽像素须大于等于100且小于等于4096,图像中不能带有旋转信息。

问3:如何通过内网VPC访问图像搜索服务?

答:需要确保您的ECS实例与图像搜索实例在同一地域。在SDK配置中,将endpointType设置为"internal",并将endpoint设置为对应地域的VPC地址(如imagesearch-vpc.ap-southeast-1.aliyuncs.com)。

问4:图像搜索的计费方式是什么?

答:采用按月(自然月)预付费资源包的计费方式,计费项只包括图片最大容量和访问频次(QPS),其余功能均免费使用。图片最大容量可选10万至5000万共8个规格,QPS可选1、5、10三个规格。

问5:如果图片新增失败,可能的原因有哪些?

答:常见原因包括:图片格式不支持、图片大小超过4MB、图片像素不符合要求(小于100或大于4096)、图像中含有旋转信息、实例名称填写错误(注意是实例名称不是实例ID)、AccessKey权限不足等。

问6:如何批量导入大量图片?

答:可以通过批量操作功能实现。首先将图片上传到阿里云OSS(需与图像搜索实例在同一地域),然后通过批量操作功能引用OSS上的JSONL文件进行批量导入。如果图片没有存储在OSS,可使用OSSImport工具先将图片上传到OSS。

相关文章
|
2月前
|
存储 弹性计算 Kubernetes
阿里云容器服务ACK配置Kubernetes集群与应用部署完全指南
本文系统讲解阿里云容器服务ACK的集群配置与应用部署全流程。首先解析ACK托管版、专有版与Serverless版的架构差异与选型策略,帮助用户根据业务场景做出合理决策。随后详细讲解通过控制台创建ACK托管集群的完整步骤,涵盖网络规划(Terway与Flannel对比、CIDR配置)、节点池管理等关键环节。在应用部署层面,深入介绍Deployment、StatefulSet等核心工作负载的YAML编排实践,并通过Service与ALB Ingress实现服务暴露与七层负载均衡。存储管理部分系统讲解基于CSI的云盘动态存储卷与ossfs 2.0的使用方法。可观测性方面,详解Logtail日志采集与
|
2月前
|
前端开发 JavaScript Serverless
阿里云宜搭对接使用完全指南:从连接到集成的全方位解析
本文系统性地阐述了阿里云宜搭低代码开发平台与外部系统对接的多种技术方案与实践路径。文章从宜搭平台的架构特性出发,深入讲解了连接器机制、远程API调用、数据源配置、服务回调、OpenAPI开放接口以及FaaS函数计算集成等六大核心对接方式。通过详细的配置步骤、丰富的代码示例(涵盖Java、Python、JavaScript等语言)和真实业务场景的剖析,帮助开发者全面掌握宜搭的集成能力。文章还涵盖了鉴权配置、跨域处理、性能优化、安全管控等高级话题,并提供了常见问题的解决方案。无论是简单的数据查询同步,还是复杂的业务流程编排,读者都能从中找到适合的对接策略与实施方法。
|
2月前
|
存储 缓存 安全
阿里云云存储网关(CSG)完全对接指南:从零搭建到生产级实践
本文系统性地阐述了阿里云云存储网关(CSG)的完整对接与使用流程。首先解析了CSG作为混合云存储入口的核心价值,厘清了文件网关与块网关的适用场景差异。随后分步演示了云上文件网关与块网关的创建过程,涵盖网络规划、协议选择(NFS/SMB/iSCSI)、缓存配置及共享挂载等关键环节。深入探讨了跨可用区高可用部署、基于RAM的精细权限控制、极速同步机制以及智能缓存策略等高级特性。最后结合实际业务场景,总结了存储类型选型、内网免流成本优化及监控告警等生产级最佳实践,旨在帮助读者构建安全、高效、经济的云存储架构。
|
JSON 监控 API
虾皮(shopee)商品列表接口(虾皮API 系列)
虾皮(Shopee)是东南亚及台湾地区的知名电商平台,提供丰富的商品数据。通过其API接口,开发者可合法获取商品列表信息,包括商品ID、名称、价格等,支持按分类、关键词、价格范围等条件筛选。Python示例代码展示了如何使用API进行请求,并解析返回的JSON数据。应用场景涵盖市场调研、竞品分析、选品决策、价格监控及数据可视化,帮助电商从业者和分析师更好地理解市场动态,优化运营策略。
1288 6
|
自然语言处理 搜索推荐 API
通义千问API:用4行代码对话大模型
本章将通过一个简单的例子,让你快速进入到通义千问大模型应用开发的世界。
通义千问API:用4行代码对话大模型
|
8月前
|
人工智能 自然语言处理 物联网
AI 智能化测试平台:支持手工测试用例自动化执行的企业级解决方案
测吧推出AI智能化测试平台,基于大模型与智能体技术,将自然语言用例自动转化为可执行测试,无需脚本即可完成Web系统自动化测试。支持用例生成、智能执行、自动断言与缺陷提交,显著降低企业测试成本,提升效率与覆盖率,助力测试能力从“个人经验”向“平台化”升级,已服务华为、招行、军工等高复杂度行业客户。
|
5月前
|
JSON 算法 API
​​​​​​​调用1688按图搜索商品API接口指南
本文详解1688按图搜商品API的调用方法:涵盖注册应用、获取密钥、图片上传(URL或Base64)、签名生成、参数拼接与POST请求全流程,并附Python示例代码及安全注意事项,助开发者快速集成图像搜索能力。(239字)
1084 0
|
前端开发
修改Ant Design 按钮的样式
修改Ant Design 按钮的样式
1667 0
|
4月前
|
人工智能 自然语言处理 程序员
百炼专属版 Qwen3.6-Plus 入门:和普通通义千问到底有什么不一样?
本文以真实体验出发,详解百炼专属版五大核心优势:100万token超长上下文、数据完全隔离、可建私人知识库、支持模型微调、开放API调用。对比普通通义千问,它不止是升级版,更是面向深度用户的AI生产力平台——适合处理长文档、重隐私、需定制的创作者与专业人士。
|
数据采集 JavaScript 前端开发
JavaScript中通过array.filter()实现数组的数据筛选、数据清洗和链式调用,JS中数组过滤器的使用详解(附实际应用代码)
用array.filter()来实现数据筛选、数据清洗和链式调用,相对于for循环更加清晰,语义化强,能显著提升代码的可读性和可维护性。博客不应该只有代码和解决方案,重点应该在于给出解决方案的同时分享思维模式,只有思维才能可持续地解决问题,只有思维才是真正值得学习和分享的核心要素。如果这篇博客能给您带来一点帮助,麻烦您点个赞支持一下,还可以收藏起来以备不时之需,有疑问和错误欢迎在评论区指出~

热门文章

最新文章