欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

Java避免重復(fù)上傳相同圖片的解決方案

 更新時(shí)間:2025年06月18日 09:30:54   作者:Nicky.Ma  
相信大家也都經(jīng)歷過(guò),前端在一個(gè)請(qǐng)求發(fā)送后立即禁用掉按鈕,這里咱們來(lái)討論一下后端對(duì)防止重復(fù)提交的處理方式,這篇文章主要介紹了Java避免重復(fù)上傳相同圖片的解決方案,需要的朋友可以參考下

前言

在開(kāi)發(fā)過(guò)程中,我們經(jīng)常會(huì)遇到需要上傳圖片的場(chǎng)景。然而,當(dāng)接口對(duì)上傳的圖片做了重復(fù)限制時(shí),如何有效地對(duì)圖片進(jìn)行微調(diào),使其在不改變核心內(nèi)容的前提下避免被識(shí)別為重復(fù)圖片,成為了一個(gè)需要解決的問(wèn)題。本文將介紹一種通過(guò)輕微調(diào)整圖片大小和添加隨機(jī)噪聲來(lái)實(shí)現(xiàn)圖片微調(diào)的方法,并提供相應(yīng)的 Java 代碼示例。

背景

在項(xiàng)目中,我們遇到了一個(gè)具體問(wèn)題:當(dāng)上傳圖片時(shí),接口會(huì)檢查圖片是否與已有的圖片重復(fù)。如果重復(fù),則返回錯(cuò)誤碼 -2018。為了解決這個(gè)問(wèn)題,我們需要對(duì)圖片進(jìn)行微調(diào),使其在技術(shù)上不被視為同一張圖片,同時(shí)保持視覺(jué)效果基本不變。

解決方案

我們的解決方案主要包括以下幾個(gè)步驟:

  • 圖片尺寸的輕微調(diào)整:通過(guò)隨機(jī)調(diào)整圖片的寬度和高度,使其與原始圖片略有不同。
  • 添加隨機(jī)噪聲:在圖片的像素值上添加輕微的隨機(jī)噪聲,進(jìn)一步減少圖片的相似性。
  • 避免影響圖片質(zhì)量:確保微調(diào)操作對(duì)圖片的視覺(jué)效果和特征碼提取的影響最小化。

下面是具體的代碼實(shí)現(xiàn):

import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.util.concurrent.ThreadLocalRandom;
import javax.imageio.ImageIO;

private File adjustImage(File originalFile) throws IOException {
    BufferedImage originalImage = ImageIO.read(originalFile);
    if (originalImage == null) {
        throw new IOException("無(wú)法讀取圖像文件");
    }

    // 輕微調(diào)整大小
    int widthAdjustment = ThreadLocalRandom.current().nextInt(-2, 3);
    int heightAdjustment = ThreadLocalRandom.current().nextInt(-2, 3);
    int newWidth = Math.max(1, originalImage.getWidth() + widthAdjustment);
    int newHeight = Math.max(1, originalImage.getHeight() + heightAdjustment);

    BufferedImage resizedImage = new BufferedImage(newWidth, newHeight, originalImage.getType());
    resizedImage.getGraphics().drawImage(originalImage.getScaledInstance(newWidth, newHeight, java.awt.Image.SCALE_SMOOTH), 0, 0, null);

    // 添加隨機(jī)噪聲
    BufferedImage noisyImage = addOptimizedRandomNoise(resizedImage);

    // 將調(diào)整后的圖片保存到臨時(shí)文件
    File adjustedFile = File.createTempFile("adjusted_image", ".jpg");
    ImageIO.write(noisyImage, "jpg", adjustedFile);

    return adjustedFile;
}

private BufferedImage addOptimizedRandomNoise(BufferedImage image) {
    BufferedImage noisyImage = new BufferedImage(image.getWidth(), image.getHeight(), image.getType());
    for (int x = 0; x < image.getWidth(); x++) {
        for (int y = 0; y < image.getHeight(); y++) {
            int pixel = image.getRGB(x, y);
            int red = (pixel >> 16) & 0xff;
            int green = (pixel >> 8) & 0xff;
            int blue = pixel & 0xff;

            // 添加隨機(jī)噪聲,范圍縮小到-5到5,并且以0為中心對(duì)稱分布
            red = Math.min(255, Math.max(0, red + ThreadLocalRandom.current().nextInt(-5, 6)));
            green = Math.min(255, Math.max(0, green + ThreadLocalRandom.current().nextInt(-5, 6)));
            blue = Math.min(255, Math.max(0, blue + ThreadLocalRandom.current().nextInt(-5, 6)));

            int newPixel = (pixel & 0xFF000000) | (red << 16) | (green << 8) | blue;
            noisyImage.setRGB(x, y, newPixel);
        }
    }
    return noisyImage;
}

代碼說(shuō)明

  • 圖片尺寸調(diào)整:通過(guò) ThreadLocalRandom.current().nextInt(-2, 3) 隨機(jī)生成寬度和高度的調(diào)整值,范圍在 -2 到 2 之間。這樣可以確保調(diào)整后的圖片尺寸與原始圖片非常接近,但又不完全相同。

  • 隨機(jī)噪聲添加:在每個(gè)像素的 RGB 值上添加范圍在 -5 到 5 之間的隨機(jī)噪聲。這種輕微的噪聲不會(huì)顯著影響圖片的視覺(jué)效果,但可以有效降低圖片的相似性。

  • 保存臨時(shí)文件:將調(diào)整后的圖片保存到臨時(shí)文件中,以便后續(xù)上傳。

使用場(chǎng)景

這段代碼可以在需要上傳圖片的場(chǎng)景中使用,尤其是在接口對(duì)圖片重復(fù)性有嚴(yán)格限制的情況下。通過(guò)微調(diào)圖片,可以避免因圖片重復(fù)而導(dǎo)致的上傳失敗問(wèn)題。

注意事項(xiàng)

  • 調(diào)整范圍:根據(jù)實(shí)際需求,可以調(diào)整圖片尺寸和噪聲的范圍。但需要注意,調(diào)整范圍過(guò)大可能會(huì)影響圖片的視覺(jué)效果和特征碼提取。
  • 性能優(yōu)化:圖片處理操作可能會(huì)增加一定的計(jì)算開(kāi)銷,尤其是在處理大量圖片時(shí),需要考慮性能優(yōu)化。
  • 臨時(shí)文件清理:確保在業(yè)務(wù)完成后刪除臨時(shí)文件,以避免不必要的文件殘留。

通過(guò)上述方法,我們成功解決了圖片重復(fù)上傳的問(wèn)題,同時(shí)保持了圖片的視覺(jué)效果和特征碼提取的準(zhǔn)確性。希望這篇文章能為遇到類似問(wèn)題的開(kāi)發(fā)者提供一些參考和幫助。

到此這篇關(guān)于Java避免重復(fù)上傳相同圖片的文章就介紹到這了,更多相關(guān)Java避免重復(fù)上傳相同圖片內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java實(shí)現(xiàn)網(wǎng)頁(yè)爬蟲的示例講解

    java實(shí)現(xiàn)網(wǎng)頁(yè)爬蟲的示例講解

    下面小編就為大家?guī)?lái)一篇java實(shí)現(xiàn)網(wǎng)頁(yè)爬蟲的示例講解。小編覺(jué)得挺不錯(cuò)的,現(xiàn)在就分享給大家,也給大家做個(gè)參考。一起跟隨小編過(guò)來(lái)看看吧
    2017-08-08
  • SpringBoot整合Web之AOP配置詳解

    SpringBoot整合Web之AOP配置詳解

    面向切面編程(aspect-oriented programming,AOP)主要實(shí)現(xiàn)的目的是針對(duì)業(yè)務(wù)處理過(guò)程中的切面進(jìn)行提取,諸如日志、事務(wù)管理和安全這樣的系統(tǒng)服務(wù),從而使得業(yè)務(wù)邏輯各部分之間的耦合度降低,提高程序的可重用性,同時(shí)提高了開(kāi)發(fā)的效率
    2022-08-08
  • 利用Java對(duì)PDF文件進(jìn)行電子簽章的實(shí)戰(zhàn)過(guò)程

    利用Java對(duì)PDF文件進(jìn)行電子簽章的實(shí)戰(zhàn)過(guò)程

    隨著電子賬單、回單、通知、合同的流行,電子文檔的可信度變得非常重要,為防止非法篡改,確保文檔的權(quán)威性,我們可以對(duì)PDF進(jìn)行電子簽章,這篇文章主要給大家介紹了關(guān)于如何利用Java對(duì)PDF文件進(jìn)行電子簽章的相關(guān)資料,需要的朋友可以參考下
    2021-07-07
  • SpringBoot中配置AOP詳解

    SpringBoot中配置AOP詳解

    這篇文章主要介紹了SpringBoot中配置AOP詳解,Spring Boot 在Spring 的基礎(chǔ)上對(duì)AOP的配置提供了自動(dòng)化配置解決方案spring-boot-starter-aop,使開(kāi)發(fā)者能夠更加便捷地在Spring Boot項(xiàng)目中使用AOP,需要的朋友可以參考下
    2024-01-01
  • Spring源碼解析 Bean的實(shí)例化

    Spring源碼解析 Bean的實(shí)例化

    這篇文章主要介紹了Spring源碼解析 Bean的實(shí)例化,文章圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹沒(méi)具有一定的參考價(jià)值,需要的小伙伴可以參考一下
    2022-07-07
  • 解決springboot項(xiàng)目打成jar包后運(yùn)行時(shí)碰到的小坑

    解決springboot項(xiàng)目打成jar包后運(yùn)行時(shí)碰到的小坑

    這篇文章主要介紹了解決springboot項(xiàng)目打成jar包后運(yùn)行時(shí)碰到的小坑,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2022-02-02
  • Spring?Cloud?Gateway動(dòng)態(tài)路由Apollo實(shí)現(xiàn)詳解

    Spring?Cloud?Gateway動(dòng)態(tài)路由Apollo實(shí)現(xiàn)詳解

    這篇文章主要為大家介紹了Spring?Cloud?Gateway動(dòng)態(tài)路由通過(guò)Apollo實(shí)現(xiàn)示例詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2022-10-10
  • springboot-rabbitmq-reply?消息直接回復(fù)模式詳情

    springboot-rabbitmq-reply?消息直接回復(fù)模式詳情

    這篇文章主要介紹了springboot-rabbitmq-reply消息直接回復(fù)模式詳情,文章通過(guò)圍繞主題展開(kāi)詳細(xì)的內(nèi)容介紹,具有一定的參考價(jià)值,感興趣的小伙伴可以參考一下
    2022-09-09
  • SpringBoot獲取HttpServletRequest的3種方式總結(jié)

    SpringBoot獲取HttpServletRequest的3種方式總結(jié)

    這篇文章主要給大家介紹了關(guān)于SpringBoot獲取HttpServletRequest的3種方式,在Spring boot項(xiàng)目中經(jīng)常要用到Servlet的常用對(duì)象如HttpServletRequest request,HttpServletResponse response,HttpSession session,需要的朋友可以參考下
    2023-08-08
  • 如何利用Ganymed SSH-2模擬SSH操作

    如何利用Ganymed SSH-2模擬SSH操作

    這幾天看SFTP資料時(shí),無(wú)意中看到了Ganymed SSH-2,寫了個(gè)簡(jiǎn)單demo,通過(guò),感覺(jué)挺好用的,下面就和大家分享下。需要的朋友可以過(guò)來(lái)參考參考
    2013-08-08

最新評(píng)論