java疯狂,java疯狂讲义第五版pdf

发布时间:2023-01-09

本文目录一览:

  1. [如何在Java中进行图片剪裁 疯狂JAVA](#如何在Java中进行图片剪裁 疯狂JAVA)
  2. 大家觉得初学者《疯狂Java讲义》怎么样
  3. 疯狂java讲义学完什么水平
  4. 学习JAVA,有什么书籍推荐
  5. 丛林也疯狂java怎么下载

如何在Java中进行图片剪裁 疯狂JAVA

package test;
import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.Image;
import java.awt.geom.AffineTransform;
import java.awt.image.AffineTransformOp;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import java.nio.Buffer;
import javax.imageio.ImageIO;
import javax.imageio.stream.ImageOutputStream;
/**
 * 裁剪、缩放图片工具类
 *
 * @author CSDN 没有梦想-何必远方
 */
public class ImgUtils {
    /**
     * 缩放图片方法
     *
     * @param srcImageFile 要缩放的图片路径
     * @param result 缩放后的图片路径
     * @param height 目标高度像素
     * @param width 目标宽度像素
     * @param bb 是否补白
     */
    public final static void scale(String srcImageFile, String result,
                                   int height, int width, boolean bb) {
        try {
            double ratio = 0.0; // 缩放比例
            File f = new File(srcImageFile);
            BufferedImage bi = ImageIO.read(f);
            Image itemp = bi.getScaledInstance(width, height, bi.SCALE_SMOOTH); // bi.SCALE_SMOOTH
            // 选择图像平滑度比缩放速度具有更高优先级的图像缩放算法。
            // 计算比例
            if ((bi.getHeight() > height) || (bi.getWidth() > width)) {
                double ratioHeight = (new Integer(height)).doubleValue()
                        / bi.getHeight();
                double ratioWhidth = (new Integer(width)).doubleValue()
                        / bi.getWidth();
                if (ratioHeight < ratioWhidth) {
                    ratio = ratioHeight;
                } else {
                    ratio = ratioWhidth;
                }
                AffineTransformOp op = new AffineTransformOp(AffineTransform // 仿射转换
                        .getScaleInstance(ratio, ratio), null); // 返回表示剪切变换的变换
                itemp = op.filter(bi, null); // 转换源 BufferedImage 并将结果存储在目标
                // BufferedImage 中。
            }
            if (bb) { // 补白
                BufferedImage image = new BufferedImage(width, height,
                        BufferedImage.TYPE_INT_RGB); // 构造一个类型为预定义图像类型之一的
                // BufferedImage。
                Graphics2D g = image.createGraphics(); // 创建一个
                // Graphics2D,可以将它绘制到此
                // BufferedImage 中。
                g.setColor(Color.white); // 控制颜色
                g.fillRect(0, 0, width, height); // 使用 Graphics2D 上下文的设置,填充 Shape
                // 的内部区域。
                if (width == itemp.getWidth(null))
                    g.drawImage(itemp, 0, (height - itemp.getHeight(null)) / 2,
                            itemp.getWidth(null), itemp.getHeight(null),
                            Color.white, null);
                else
                    g.drawImage(itemp, (width - itemp.getWidth(null)) / 2, 0,
                            itemp.getWidth(null), itemp.getHeight(null),
                            Color.white, null);
                g.dispose();
                itemp = image;
            }
            ImageIO.write((BufferedImage) itemp, "JPEG", new File(result)); // 输出压缩图片
        } catch (IOException e) {
            e.printStackTrace();
        }
    }
    /**
     * 裁剪图片方法
     *
     * @param bufferedImage 图像源
     * @param startX 裁剪开始x坐标
     * @param startY 裁剪开始y坐标
     * @param endX 裁剪结束x坐标
     * @param endY 裁剪结束y坐标
     * @return
     */
    public static BufferedImage cropImage(BufferedImage bufferedImage,
                                          int startX, int startY, int endX, int endY) {
        int width = bufferedImage.getWidth();
        int height = bufferedImage.getHeight();
        if (startX == -1) {
            startX = 0;
        }
        if (startY == -1) {
            startY = 0;
        }
        if (endX == -1) {
            endX = width - 1;
        }
        if (endY == -1) {
            endY = height - 1;
        }
        BufferedImage result = new BufferedImage(endX - startX, endY - startY,
                4);
        for (int x = startX; x < endX; ++x) {
            for (int y = startY; y < endY; ++y) {
                int rgb = bufferedImage.getRGB(x, y);
                result.setRGB(x - startX, y - startY, rgb);
            }
        }
        return result;
    }
    public static void main(String[] args) throws IOException {
        File input = new File("input.jpg");
        BufferedImage img = ImageIO.read(input);
        cropImage(img, 10, 10, 20, 20);
        File output = new File("output.jpg");
        ImageIO.write(img, "jpg", output);
    }
}

大家觉得初学者《疯狂Java讲义》怎么样

我见过特好的一本书,很值得买。全书大概有800页,Java SE的知识都涉及到,部分内容对新手有难度,没有编程基础不建议看。而且也不适合只想过Java二级的,只适合打算在Java领域深造的人群。至于大神的话,不用看SE的书了吧。

疯狂java讲义学完什么水平

疯狂java讲义学完中等水平。疯狂java讲义是国人原创必读经典了,同样非常适合初学者。讲解内容细致全面,系统通俗,目录划分和查找非常方便,就算完全没有基础也可以学的没有什么压力,学完可以升级一个水平,达到中等水平。

学习JAVA,有什么书籍推荐

《疯狂Java讲义》 这本书深入介绍了Java编程的相关方面,这本书的内容有Java基本语法结构、面向对象特征、集合框架体系、泛型、异常处理、GUI编程、JDBC数据库编程等等等。非常齐全,我有全套Java视频资料。 《Head First Java》 这本书呢被亚马逊评为十大好书之一。《Head First Java》是本完整的面向对象程序设计和Java的学习指导。是根据学习理论所设计的,让你可以从学习程序语言的基础开始一直到包括线程、网络与分布式程序等项目。最重要的,你会学会如何像个面向对象开发者一样去思考。 《深入理解Java虚拟机:JVM高级特性与最佳实践》 这本书的主要内容是如何独立地编译一个OpenJDK7,讲解了JVM的自动内存管理,分析了虚拟机的执行子系统,讲解了程序的编译与代码的优化,探讨了Java实现高效并发的原理。 《企业应用架构模式》 这本书适合做框架的人去看,如果你打算自己写一个ORM的话,这本书是一定要看的。 《Agile Java》中文版 《Agile Java》中文版以JDK5.0的语法为基础讲解,如果同学们要学习JDK5.0的新语法也不错。可以让你以最少的时间掌握 Java最重要的知识,同时培养出优秀的编程思路,我有全套Java视频资料。

丛林也疯狂java怎么下载

  1. 首先请下载模拟器安装好,然后下载丛林也疯狂Java安装包。
  2. 打开模拟器找到你下载好的安装包,右键选择使用模拟器安装此程序。
  3. 安装完毕后,我们点击模拟器的首页,就可以看到已经安装好的丛林也疯狂Java游戏了。