From 886d2a89d6b6d2b68f1a2cf36bbc9df019f314a4 Mon Sep 17 00:00:00 2001 From: zhangsan <646228430@qq.com> Date: Sun, 30 Mar 2025 18:11:08 +0800 Subject: [PATCH] =?UTF-8?q?3.30=20=E4=BB=A5=E5=9B=BE=E6=90=9C=E5=9B=BE?= =?UTF-8?q?=E3=80=81=E7=A7=81=E4=BA=BA=E5=9B=BE=E5=BA=93=E5=86=85=E6=8C=89?= =?UTF-8?q?=E9=A2=9C=E8=89=B2=E6=90=9C=E5=9B=BE?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- sql/create_table.sql | 6 +- .../api/imagesearch/ImageSearchApiFacade.java | 29 +++ .../imagesearch/model/ImageSearchResult.java | 20 ++ .../imagesearch/sub/GetImageFirstUrlApi.java | 64 ++++++ .../api/imagesearch/sub/GetImageListApi.java | 71 +++++++ .../imagesearch/sub/GetImagePageUrlApi.java | 87 ++++++++ .../controller/PictureController.java | 28 ++- .../manager/CosManager.java | 31 ++- .../manager/upload/PictureUploadTemplate.java | 2 +- .../picture/SearchPictureByColorRequest.java | 24 +++ .../SearchPictureByPictureRequest.java | 19 ++ .../model/dto/space/SpaceQueryRequest.java | 11 + .../model/entity/Picture.java | 5 + .../model/vo/PictureVO.java | 5 + .../service/PictureService.java | 15 ++ .../service/impl/PictureServiceImpl.java | 100 ++++++++- .../utils/ColorSimilarUtils.java | 63 ++++++ .../utils/ColorTransformUtils.java | 28 +++ .../picturesearch/AbstractSearchPicture.java | 63 ++++++ .../java/picturesearch/PictureSearchTest.java | 27 +++ .../picturesearch/enums/SearchSourceEnum.java | 69 ++++++ .../impl/BaiduSearchPicture.java | 201 ++++++++++++++++++ .../picturesearch/impl/SoSearchPicture.java | 137 ++++++++++++ .../model/SearchPictureResult.java | 33 +++ src/main/resources/mapper/PictureMapper.xml | 1 + 25 files changed, 1130 insertions(+), 9 deletions(-) create mode 100644 src/main/java/edu/whut/smilepicturebackend/api/imagesearch/ImageSearchApiFacade.java create mode 100644 src/main/java/edu/whut/smilepicturebackend/api/imagesearch/model/ImageSearchResult.java create mode 100644 src/main/java/edu/whut/smilepicturebackend/api/imagesearch/sub/GetImageFirstUrlApi.java create mode 100644 src/main/java/edu/whut/smilepicturebackend/api/imagesearch/sub/GetImageListApi.java create mode 100644 src/main/java/edu/whut/smilepicturebackend/api/imagesearch/sub/GetImagePageUrlApi.java create mode 100644 src/main/java/edu/whut/smilepicturebackend/model/dto/picture/SearchPictureByColorRequest.java create mode 100644 src/main/java/edu/whut/smilepicturebackend/model/dto/picture/SearchPictureByPictureRequest.java create mode 100644 src/main/java/edu/whut/smilepicturebackend/utils/ColorSimilarUtils.java create mode 100644 src/main/java/edu/whut/smilepicturebackend/utils/ColorTransformUtils.java create mode 100644 src/main/java/picturesearch/AbstractSearchPicture.java create mode 100644 src/main/java/picturesearch/PictureSearchTest.java create mode 100644 src/main/java/picturesearch/enums/SearchSourceEnum.java create mode 100644 src/main/java/picturesearch/impl/BaiduSearchPicture.java create mode 100644 src/main/java/picturesearch/impl/SoSearchPicture.java create mode 100644 src/main/java/picturesearch/model/SearchPictureResult.java diff --git a/sql/create_table.sql b/sql/create_table.sql index f49bfc3..efacf80 100644 --- a/sql/create_table.sql +++ b/sql/create_table.sql @@ -89,4 +89,8 @@ ALTER TABLE picture ADD COLUMN space_id bigint null comment '空间 id(为空表示公共空间)'; -- 创建索引 -CREATE INDEX idx_spaceId ON picture (space_id); \ No newline at end of file +CREATE INDEX idx_spaceId ON picture (space_id); + +-- 添加新列 +ALTER TABLE picture + ADD COLUMN pic_color varchar(16) null comment '图片主色调'; \ No newline at end of file diff --git a/src/main/java/edu/whut/smilepicturebackend/api/imagesearch/ImageSearchApiFacade.java b/src/main/java/edu/whut/smilepicturebackend/api/imagesearch/ImageSearchApiFacade.java new file mode 100644 index 0000000..747f1f5 --- /dev/null +++ b/src/main/java/edu/whut/smilepicturebackend/api/imagesearch/ImageSearchApiFacade.java @@ -0,0 +1,29 @@ +package edu.whut.smilepicturebackend.api.imagesearch; +import edu.whut.smilepicturebackend.api.imagesearch.model.ImageSearchResult; +import edu.whut.smilepicturebackend.api.imagesearch.sub.GetImageFirstUrlApi; +import edu.whut.smilepicturebackend.api.imagesearch.sub.GetImageListApi; +import edu.whut.smilepicturebackend.api.imagesearch.sub.GetImagePageUrlApi; +import lombok.extern.slf4j.Slf4j; + +import java.util.List; + +@Slf4j +public class ImageSearchApiFacade { + + /** + * 搜索图片 + * @param localImagePath + * @return + */ + public static List searchImage(String localImagePath) { + String imagePageUrl = GetImagePageUrlApi.getImagePageUrl(localImagePath); + String imageFirstUrl = GetImageFirstUrlApi.getImageFirstUrl(imagePageUrl); + List imageList = GetImageListApi.getImageList(imageFirstUrl); + return imageList; + } + + public static void main(String[] args) { + List imageList = searchImage("https://www.codefather.cn/logo.png"); + System.out.println("结果列表" + imageList); + } +} diff --git a/src/main/java/edu/whut/smilepicturebackend/api/imagesearch/model/ImageSearchResult.java b/src/main/java/edu/whut/smilepicturebackend/api/imagesearch/model/ImageSearchResult.java new file mode 100644 index 0000000..c8bf3d6 --- /dev/null +++ b/src/main/java/edu/whut/smilepicturebackend/api/imagesearch/model/ImageSearchResult.java @@ -0,0 +1,20 @@ +package edu.whut.smilepicturebackend.api.imagesearch.model; + +import lombok.Data; + +/** + * 图片搜索结果 + */ +@Data +public class ImageSearchResult { + + /** + * 缩略图地址 + */ + private String thumbUrl; + + /** + * 来源地址 + */ + private String fromUrl; +} \ No newline at end of file diff --git a/src/main/java/edu/whut/smilepicturebackend/api/imagesearch/sub/GetImageFirstUrlApi.java b/src/main/java/edu/whut/smilepicturebackend/api/imagesearch/sub/GetImageFirstUrlApi.java new file mode 100644 index 0000000..9f104d9 --- /dev/null +++ b/src/main/java/edu/whut/smilepicturebackend/api/imagesearch/sub/GetImageFirstUrlApi.java @@ -0,0 +1,64 @@ +package edu.whut.smilepicturebackend.api.imagesearch.sub; +import edu.whut.smilepicturebackend.exception.BusinessException; +import edu.whut.smilepicturebackend.exception.ErrorCode; +import lombok.extern.slf4j.Slf4j; +import org.jsoup.Jsoup; +import org.jsoup.nodes.Document; +import org.jsoup.nodes.Element; +import org.jsoup.select.Elements; + +import java.util.regex.Matcher; +import java.util.regex.Pattern; + +/** + * 获取图片列表接口的 Api(Step 2) + */ +@Slf4j +public class GetImageFirstUrlApi { + + /** + * 获取图片列表页面地址 + * + * @param url + * @return + */ + public static String getImageFirstUrl(String url) { + try { + // 使用 Jsoup 获取 HTML 内容 + Document document = Jsoup.connect(url) + .timeout(5000) + .get(); + + // 获取所有