java开源商城--(5)阿里云oss上传图片配置

mall商城的图片都是使用阿里云oss存储的,使用起来很方便,但前提是我们要先购买阿里云oss对象存储服务。如果你已经拥有阿里云账号,并且认证过就可以购买

1.购买OSS对象存储

   进入阿里云首页,选择产品--对象存储oss,如下图

   

   可以直接购买包月调整,当然也可以自己配置,我这里买的是包月套餐,

     

    支付完成后,就可以进行下面的操作了

2.创建bucket

    进入管理控制台,点击 对象存储OSS菜单,创建bucket,  bucket可以理解为一个目录名称。我们可以新建bucket

     

创建完成后,就可以在左侧导航中看到新创建的bucket了

3.bucket设置

    点击上面创建的bucket名称,可以进行基本设置,可以设置域名,访问权限,跨域设置,这里我们简单介绍下跨域设置,

如果不进行跨域设置,通过浏览器上传图片的时候会提示strict-origin-when-cross-origin,

参照:https://www.cnblogs.com/weifeng1463/p/9120442.html

            https://help.aliyun.com/document_detail/44199.html

  点击 bucket名称,找到 基础设置,然后找到 跨域设置, 点击 创建规则 ,生成跨域规则,如下图

 

  跨域规则创建完成后,浏览器上传就可以正常上传图片了

4. 创建accesskey

    程序中如果使用oss,要创建accesskey, 点击 accesskey就可以创建key了,如下图

    

 

5.修改配置

    接下来我们要修改mall商城中关于oss的相关配置,

    在mall-admin中找到application.yml文件,找到aliyun oss配置,把我们刚创建bucket和accesskey配置进去就可以了

   

同时也要把mall-admin-web中的上传组件的action地址修改成我们自己的阿里云oss地址endpoint

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要使用阿里云oss进行图片相似度对比,可以使用以下步骤: 1. 在阿里云oss中存储图片,获取其访问路径。 2. 通过Java代码将图片路径读取为输入流(可以使用Java的IO流库)。 3. 使用开源Java相似度比较库,如ImageMagick或OpenCV,将输入流中的图片转换成内存中的图像对象,然后对其进行相似度比较。 4. 如果需要得到结果,可以将相似度比较的结果输出到控制台或写入到文件中。 下面是使用Java的ImageMagick库进行图片相似度比较的示例代码: ```java import java.io.IOException; import java.io.InputStream; import java.util.ArrayList; import java.util.LinkedList; import java.util.List; import java.util.Queue; import java.util.concurrent.ExecutorService; import java.util.concurrent.Executors; import java.util.concurrent.atomic.AtomicInteger; import java.util.logging.Level; import java.util.logging.Logger; import org.bytedeco.javacpp.BytePointer; import org.bytedeco.javacpp.FloatPointer; import org.bytedeco.javacpp.Loader; import org.bytedeco.javacpp.ShortPointer; import org.bytedeco.opencv.global.opencv_calib3d; import org.bytedeco.opencv.global.opencv_core; import org.bytedeco.opencv.global.opencv_imgcodecs; import org.bytedeco.opencv.global.opencv_imgproc; import org.bytedeco.opencv.opencv_core.DMatchVector; import org.bytedeco.opencv.opencv_core.DMatch; import org.bytedeco.opencv.opencv_core.DescriptorMatcher; import org.bytedeco.opencv.opencv_core.KeyPointVector; import org.bytedeco.opencv.opencv_core.KeyPoint; import org.bytedeco.opencv.opencv_core.Mat; import org.bytedeco.opencv.opencv_features2d.AKAZE; import org.bytedeco.opencv.opencv_features2d.Feature2D; import org.bytedeco.opencv.opencv_features2d.FlannBasedMatcher; import org.bytedeco.opencv.opencv_features2d.ORB; import org.bytedeco.opencv.opencv_flann.IndexParams; import org.bytedeco.opencv.opencv_flann.KSearchParams; import org.bytedeco.opencv.opencv_flann.LshIndexParams; import org.bytedeco.opencv.opencv_flann.SearchParams; import static org.bytedeco.opencv.global.opencv_core.CV_32FC1; import static org.bytedeco.opencv.global.opencv_core.NORM_HAMMING; import static org.bytedeco.opencv.global.opencv_core.NORM_L2; import static org.bytedeco.opencv.global.opencv_imgcodecs.imread; import static org.bytedeco.opencv.global.opencv_imgcodecs.imwrite; public class CompareImage { private static final Logger LOG = Logger.getLogger(CompareImage.class.getName()); private static final int N_FEATURES = 500; public static void main(String[] args) { String img1Path = "https://your-bucket.oss-cn-hangzhou.aliyuncs.com/image1.jpg"; String img2Path = "https://your-bucket.oss-cn-hangzhou.aliyuncs.com/image2.jpg"; float simThreshold = 0.7f; try { // OpenCV灰度图像比较 float sim = compareImages(img1Path, img2Path, NORM_L2); if (sim > simThreshold) { System.out.println("两幅图像基本一致!"); } else { System.out.println("两幅图像不太一致,相似度为:" + sim); } } catch (Exception e) { LOG.log(Level.SEVERE, "图片比较出错!", e); } } /** * 比较两幅图像的相似度 * @param img1Path 第一幅图像的路径 * @param img2Path 第二幅图像的路径 * @param normType OpenCV中的归一化方法类型 * @return 返回两幅图像的相似度 */ public static float compareImages(String img1Path, String img2Path, int normType) { Mat img1 = imread(img1Path, imread.IMREAD_GRAYSCALE); Mat img2 = imread(img2Path, imread.IMREAD_GRAYSCALE); if (img1.empty() || img2.empty()) { return 0f; } // 提取特征点,描述子 KeyPointVector kpv1 = new KeyPointVector(); KeyPointVector kpv2 = new KeyPointVector(); Mat des1 = new Mat(); Mat des2 = new Mat(); Feature2D orb = ORB.create(N_FEATURES); orb.detect(img1, kpv1); orb.compute(img1, kpv1, des1); orb.detect(img2, kpv2); orb.compute(img2, kpv2, des2); // 特征点匹配 DMatchVector match = new DMatchVector(); DescriptorMatcher matcher = FlannBasedMatcher.create(); matcher.match(des1, des2, match); // 计算match中所有匹配点之间的距离,以确定两个图像之间的差异 double maxDist = 0f; double minDist = Double.MAX_VALUE; for (int i = 0; i < match.size(); i++) { DMatch dmatch = match.get(i); double dist = dmatch.distance(); if (dist < minDist) { minDist = dist; } if (dist > maxDist) { maxDist = dist; } } // 计算匹配点之间的距离,这里选择L2范数 LinkedList<KeyPoint> kp1 = new LinkedList<KeyPoint>(); LinkedList<KeyPoint> kp2 = new LinkedList<KeyPoint>(); List<DMatch> goodMatch = new ArrayList<>(); double partition = 1f; for (int i = 0; i < match.size(); i++) { DMatch dmatch = match.get(i); if ((dmatch.distance() / maxDist) < (partition)) { goodMatch.add(dmatch); kp1.addLast(kpv1.get(dmatch.queryIdx())); kp2.addLast(kpv2.get(dmatch.trainIdx())); } } // 显示匹配点 // Mat outImgMat = new Mat(); // MatOfDMatch matches = new MatOfDMatch(match.toArray()); // Features2d.drawMatches(img1, kpv1, img2, kpv2, matches, outImgMat); // showImg(outImgMat); // 计算最终的图像相似度 float sim = (float) goodMatch.size(); sim = sim / (Math.max(kpv1.size(), kpv2.size())); return sim; } } ``` 在这个代码中,我们使用了OpenCV的ORB算法来提取图像的关键点和描述符,然后对这些特征点进行匹配,计算匹配点之间的距离,并基于这些距离来确定两个图像之间的相似度。在比较过程中,可以通过调整`N_FEATURES`参数来控制特征点的数量,通过调整`simThreshold`参数来控制相似度的阈值。 值得注意的是,这只是一个简单的示例,实际的图片相似度比较可能需要更为复杂的算法和更加精细的调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值