指定したフォルダ内の画像を置き換え、元のサイズを維持します

タイトルの通り、元のフォルダの写真を写真に差し替える必要がある場合もありますが、サイズはそのままにしたいので、以下のコードスニペットを書いて記録し、使用できるように保管しました。

import java.awt.Image;
import java.awt.image.BufferedImage;
import java.io.BufferedInputStream;
import java.io.BufferedOutputStream;
import java.io.BufferedReader;
import java.io.File;
import java.io.FileInputStream;
import java.io.FileOutputStream;
import java.io.FilenameFilter;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.UnsupportedEncodingException;
import java.net.MalformedURLException;
import java.net.URL;
import java.net.URLConnection;
import java.net.URLEncoder;
import java.util.Date;
import java.util.regex.Matcher;
import java.util.regex.Pattern;

import javax.imageio.ImageIO;


/**
 * 
 */

/**
 * @author zhouzhengwei
 * 
 */
public class TestClass
{
    
    

    /**
     * @param args
     * @throws UnsupportedEncodingException
     */
    public static void main(final String[] args) throws Exception
    {
        //要替换的目录
        final File file1 = new File(
                "/Users/zhouzhengwei/Downloads/hybris6.2/hybris/bin/ext-customer-experience/personalizationsampledataaddon/resources/personalizationsampledataaddon/import/contentCatalogs/electronicsContentCatalog/images");
        final File file11 = new File(
                "/Users/zhouzhengwei/Downloads/hybris6.2/hybris/bin/ext-data/electronicsstore/resources/electronicsstore/import/sampledata");
        //用这个目录下的图片替换原来目录
        final File file2 = new File("/Users/zhouzhengwei/Documents/t3");
        HttpGet("汽车", "/Users/zhouzhengwei/Documents/t3");


        final File[] listFiles2 = file2.listFiles(new FilenameFilter()
        {
            public boolean accept(final File dir, final String name)
            {
                boolean b = false;
                if (name.endsWith("jpg") || name.endsWith("jpeg"))
                {
                    try
                    {
                        final BufferedInputStream in = new BufferedInputStream(new FileInputStream(dir + File.separator + name));
                        //字节流转图片对象
                        final Image bi = ImageIO.read(in);
                        //获取图像的高度,宽度
                        final int height = bi.getHeight(null);
                        final int width = bi.getWidth(null);
                        if ((float) width / (float) height > 2)
                        {
                            b = true;
                        }
                        in.close();
                    }
                    catch (final Exception e)
                    {
                        //e.printStackTrace();
                    }
                    return b;
                }
                else
                {
                    return false;
                }
            }
        });

        final File[] listFiles3 = file2.listFiles(new FilenameFilter()
        {
            public boolean accept(final File dir, final String name)
            {
                boolean b = false;
                if (name.endsWith("jpg") || name.endsWith("jpeg"))
                {
                    try
                    {
                        final BufferedInputStream in = new BufferedInputStream(new FileInputStream(dir + File.separator + name));
                        //字节流转图片对象
                        final Image bi = ImageIO.read(in);
                        //获取图像的高度,宽度
                        final int height = bi.getHeight(null);
                        final int width = bi.getWidth(null);
                        if ((float) width / (float) height < 2)
                        {
                            b = true;
                        }
                        in.close();
                    }
                    catch (final Exception e)
                    {
                        //
                    }
                    return b;
                }
                else
                {
                    return false;
                }
            }
        });

        disF(file1, listFiles2, listFiles3);
        disF(file11, listFiles2, listFiles3);
    }

    public static void disF(final File f, final File[] listFiles2, final File[] listFiles3)
    {
        if (f.isDirectory())
        {
            final File[] listFiles = f.listFiles(new FilenameFilter()
            {
                public boolean accept(final File dir, final String name)
                {
                    return !name.endsWith("DS_Store");
                }

            });
            for (int i = 0; i < listFiles.length; i++)
            {
                disF(listFiles[i], listFiles2, listFiles3);
            }
        }
        else
        {
            disD(f, listFiles2, listFiles3);
        }
    }

    public static void disD(final File f, final File[] listFiles2, final File[] listFiles3)
    {
        if (!f.getName().endsWith("jpg"))
        {
            return;
        }

        //选择要替换图片的尺寸
        //      if (!(f.getName().contains("960x80") || f.getName().contains("770x80") || f.getName().contains("480x118") || f.getName()
        //              .contains("1400x80")))
        //      {
    
    
        //          return;
        //      }

        try
        {
            final BufferedInputStream in = new BufferedInputStream(new FileInputStream(f));
            //字节流转图片对象
            final Image bi = ImageIO.read(in);
            //获取图像的高度,宽度
            final int height = bi.getHeight(null);
            final int width = bi.getWidth(null);


            final int k = (int) (Math.random() * (listFiles3.length));
            File f2 = listFiles3[k];
            final float ff = (float) width / (float) height;
            if (ff >= 2)
            {
                if (listFiles2 == null || listFiles2.length == 0)
                {
                    final int kk = (int) (Math.random() * (listFiles3.length));
                    f2 = listFiles3[kk];
                }
                else
                {
                    final int kk = (int) (Math.random() * (listFiles2.length));
                    f2 = listFiles2[kk];
                }

            }

            if (ff == 1)
            {
                final int kk = (int) (Math.random() * (listFiles3.length));
                f2 = listFiles3[kk];
            }


            final BufferedInputStream in2 = new BufferedInputStream(new FileInputStream(f2));
            final Image bi2 = ImageIO.read(in2);
            final int height2 = bi2.getHeight(null);
            final int width2 = bi2.getWidth(null);

            float w = 0;
            float h = 0;

            //构建图片流
            final BufferedImage tag = new BufferedImage(width, height, BufferedImage.TYPE_INT_RGB);
            //绘制改变尺寸后的图
            if ((float) width / (float) height > (float) width2 / (float) height2)
            {
                w = width;
                h = height2 * ((float) width / (float) width2);
            }
            else
            {
                h = height;
                w = width2 * ((float) height / (float) height2);
            }
            tag.getGraphics().drawImage(bi2, 0, 0, (int) w, (int) h, null);

            //输出流
            final BufferedOutputStream out = new BufferedOutputStream(new FileOutputStream(f));
            System.out.println(f.getAbsolutePath());
            ImageIO.write(tag, "jpg", out);
            in.close();
            in2.close();
            out.close();
        }
        catch (final Exception e)
        {
            e.printStackTrace();
        }

    }

    public static String HttpGet(final String str, final String dir) throws Exception
    {

        final String urlStr = "http://image.baidu.com/channel/listjson?fr=channel&tag1=" + URLEncoder.encode(str, "utf-8")
                + "&tag2=" + URLEncoder.encode("全部", "utf-8")
                + "&sorttype=1&pn=0&rn=5&ie=utf8&oe=utf-8&app=img.browse.channel.general";
        final URL url = new URL(urlStr);
        final URLConnection urlConnection = url.openConnection(); // 打开连接  

        System.out.println(urlConnection.getURL().toString());

        final BufferedReader br = new BufferedReader(new InputStreamReader(urlConnection.getInputStream(), "utf-8")); // 获取输入流  
        String line = null;
        final StringBuilder sb = new StringBuilder();
        while ((line = br.readLine()) != null)
        {
            sb.append(line);
        }
        br.close();

        //System.out.println(sb.toString());
        final String regEx = "image_url\":\"([^\"]+\")";
        final Pattern p = Pattern.compile(regEx);
        final Matcher m = p.matcher(sb.toString());
        while (m.find())
        {
            final String replaceAll = m.group().replaceFirst("image_url\":\"", "").replaceAll("jpg\"", "jpg");
            writeFile(replaceAll, dir + File.separator + new Date().getTime() + ".jpg");
            System.out.println(replaceAll);
        }
        return sb.toString();
    }


    public static void writeFile(final String strUrl, final String fileName)
    {
        URL url = null;
        try
        {
            url = new URL(strUrl);
        }
        catch (final MalformedURLException e2)
        {
            e2.printStackTrace();
        }
        InputStream is = null;
        try
        {
            is = url.openStream();
        }
        catch (final IOException e1)
        {
            e1.printStackTrace();
        }
        OutputStream os = null;

        try
        {
            os = new FileOutputStream(fileName);
            int bytesRead = 0;
            final byte[] buffer = new byte[8192];
            while ((bytesRead = is.read(buffer, 0, 8192)) != -1)
            {
                os.write(buffer, 0, bytesRead);
            }
        }
        catch (final Exception e)
        {
            //
        }
    }
}

おすすめ

転載: blog.csdn.net/zhou8622/article/details/70568938