张棚贺:去年找实习时在这里做了一些 js 测试题,回头来看,没想到能够帮助这么多人,非常感谢牛客这个平台,希望牛客越做越好!
查看图片

0 点赞 评论 收藏
分享
向宇同桌:大目标:娶妻
每天的计划:上班
0 点赞 评论 收藏
分享
接下来的路才真正的开...:第一次听说是在一个论坛上看到的,然后根据名字百度来到这里。(刚看了下注册时间,算是牛客老人咯~)
当时还记得人不是很多,很多功能也处于测试完善阶段,现在的牛客网也越来越好,牛客也算是伴随了我整个研究生的生涯。
很感谢牛客,除了让大家更好的准备笔试面试,也认识了一些朋友,大神,以及未来的准同事(哈哈哈哈)。
希望所有牛客网的同学越来越好,牛客网越来越强大~
0 点赞 评论 收藏
分享
渣渣~~:春招实习,如何进入bat等大公司
0 点赞 评论 收藏
分享
夏洛克的救赎:http://www.nowcoder.com/courses/1?coupon=AduSUa7
据说平安夜通过本链接购买左神的课,可以得到丘比特的祝福哦,不信你试试,沾沾仙气;另外,建议购买左神纸质版的书籍,方便查阅;左神的资料都是针对有基础的。
0 点赞 评论 收藏
分享
0 点赞 评论 收藏
分享

0 点赞 评论 收藏
分享
这人真骚:有三个:CR,COC,王者荣耀 。 从COC到CR都很好玩。最近在和同学玩王者。。。。
0 点赞 评论 收藏
分享
Matrix42:package nowcoder.pictureZoom;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.FileOutputStream;
import java.io.IOException;
import javax.imageio.ImageIO;
public class ImageOperater {
/**
* 左上方
*/
public static final int LEFT_UPPER = 1;
/**
* 右上方
*/
public static final int RIGHT_UPPER = 2;
/**
* 左下方
*/
public static final int LEFT_LOWER = 3;
/**
* 右下方
*/
public static final int RIGHT_LOWER = 4;
/**
* 中间
*/
public static final int CENTER = 5;
private BufferedImage image;
private String path;
private String type;
/**
* 用File构造一个ImageOperater对象
* @param file 图像文File对象
*/
public ImageOperater(File file) {
try {
this.image = ImageIO.read(file);
this.path = file.getAbsolutePath();
this.type = getType(this.path);
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 用路径构造一个ImageOperater对象
* @param path 图像文件路径
*/
public ImageOperater(String path) {
this.path = path;
readImage(this.path);
this.type = getType(this.path);
}
/**
* 使用路径构造BufferedImage对象
* @param path 图像文件路径
*/
private void readImage(String path){
try {
this.image = ImageIO.read(new File(path));
} catch (IOException e) {
e.printStackTrace();
}
}
/**
* 获取文件类型
* @param path
* @return
*/
private String getType(String path){
return path.substring(path.lastIndexOf(".")+1);
}
/**
* 等比放大图片
*/
public ImageOperater blowUpImageEqualProportion(int ratio){
//构造一个按原图放大的图片
BufferedImage image = new BufferedImage(this.image.getWidth()*ratio,
this.image.getHeight()*ratio,
BufferedImage.TYPE_INT_RGB);
//把原图画到构造的图片上
image.getGraphics().drawImage(this.image,0,0,
this.image.getWidth()*ratio,
this.image.getHeight()*ratio,
null);
this.image = image;
//返回ImageOperater对象,以便链式处理图片
return this;
}
/**
* 等比放大图片
*/
public ImageOperater reduceEqualProportion(int ratio){
//构造一个按原图缩放的图片
BufferedImage image = new BufferedImage(this.image.getWidth()/ratio,
this.image.getHeight()/ratio,
BufferedImage.TYPE_INT_RGB);
//把原图画到构造的图片上
image.getGraphics().drawImage(this.image,0,0,this.image.getWidth()/ratio,
this.image.getHeight()/ratio,
null);
this.image = image;
//返回ImageOperater对象,以便链式处理图片
return this;
}
/**
* 缩放到指定大小
*/
public ImageOperater cutNotEqualProportion(int width,int height){
//构造一个指定大小的图片
BufferedImage image = new BufferedImage(width, height,
BufferedImage.TYPE_INT_RGB);
//把原图画到构造的图片上
image.getGraphics().drawImage(this.image,0,0,width, height,null);
this.image = image;
//返回ImageOperater对象,以便链式处理图片
return this;
}
/**
* 添加水印
* @param waterMarkFile 水印文件
* @param POSITION 添加水印的位置
* @return
*/
public ImageOperater addWatermark(File waterMarkFile,int POSITION){
BufferedImage waterMark = null;
try {
waterMark = ImageIO.read(waterMarkFile);
} catch (IOException e) {
e.printStackTrace();
}
//构造一个和原图一样大小的图片
BufferedImage image = new BufferedImage(this.image.getWidth(),
this.image.getHeight(),
BufferedImage.TYPE_INT_RGB);
//把原图画到构造的图片上
image.getGraphics().drawImage(this.image,0,0,this.image.getWidth(),
this.image.getHeight(),
null);
switch (POSITION) {
case LEFT_UPPER:
image.getGraphics().drawImage(waterMark,0,0,
waterMark.getWidth(),
waterMark.getHeight(),null);
break;
case RIGHT_UPPER:
image.getGraphics().drawImage(waterMark,image.getWidth()-waterMark.getWidth(),0,
waterMark.getWidth(),
waterMark.getHeight(),null);
break;
case LEFT_LOWER:
image.getGraphics().drawImage(waterMark,0,image.getHeight()-waterMark.getHeight(),
waterMark.getWidth(),
waterMark.getHeight(),null);
break;
case RIGHT_LOWER:
image.getGraphics().drawImage(waterMark,image.getWidth()-waterMark.getWidth(),
image.getHeight()-waterMark.getHeight(),
waterMark.getWidth(),
waterMark.getHeight(),null);
break;
case CENTER:
image.getGraphics().drawImage(waterMark,(image.getWidth()-waterMark.getWidth())/2,
(image.getHeight()-waterMark.getHeight())/2,
waterMark.getWidth(),
waterMark.getHeight(),null);
break;
default:
throw new RuntimeException("指定位置不正确!");
}
this.image = image;
return this;
}
/**
* 覆盖原图保存
*/
public ImageOperater save(){
FileOutputStream fos = null;
try {
fos = new FileOutputStream(new File(path));
//保存文件
ImageIO.write(image, this.type, fos);
} catch (Exception e) {
e.printStackTrace();
}
//关闭流
try {
if(fos!=null){
fos.close();
}
} catch (IOException e) {
e.printStackTrace();
}
return this;
}
/**
* 保存到指定路径
* @param path
*/
public ImageOperater save(String path,String name){
FileOutputStream fos = null;
File file = new File(path);
//如果路径不存在,尝试创建文件夹
if(!file.exists()){
file.mkdirs();
}
//如果路径不是文件则抛出异常
if(file.isFile()){
throw new RuntimeException("指定路径不是文件夹!");
}
file = new File(file, name+"."+type);
try {
fos = new FileOutputStream(file);
ImageIO.write(image, this.type, fos);
} catch (Exception e) {
e.printStackTrace();
}
//关闭流
try {
if(fos!=null){
fos.close();
}
} catch (IOException e) {
e.printStackTrace();
}
return this;
}
/**
* 保存到指定路径(绝对路径,相对路径)
* @param path
*/
public ImageOperater save(String path,String relativePath,String name){
return save(path+File.pathSeparator+relativePath,name);
}
/**
* 获取BufferedImage对象
* @return
*/
public BufferedImage getImage(){
return this.image;
}
/**
* 获取图片绝对路径
* @return
*/
public String getAbsolutePath(){
return this.path;
}
/**
* 获取文件类型
* @return
*/
public String getImageType(){
return this.type;
}
}
Client:
package nowcoder.pictureZoom;
import java.io.File;
public class Client {
public static void main(String[] args) {
File file = new File("D:/0.jpg");
File watermark = new File("D:/1.png");
ImageOperater operater = new ImageOperater(file);
operater.reduceEqualProportion(3)
//缩小到三分之一并保存
.save("D:","1")
//在右上方加上水印并保存
.addWatermark(watermark, ImageOperater.RIGHT_UPPER)
.save("D:","2")
//下面做个骰子
.addWatermark(watermark, ImageOperater.LEFT_UPPER)
.addWatermark(watermark, ImageOperater.LEFT_LOWER)
.addWatermark(watermark, ImageOperater.RIGHT_LOWER)
.addWatermark(watermark, ImageOperater.CENTER)
.save("D:","3");
operater = new ImageOperater(file);
//当然你也可以按照自己的尺寸剪裁
operater.cutNotEqualProportion(200, 300).save("D:", "cut");
File folder = new File("D:/pic");
Batch(folder, 200, 200);
}
public static void Batch(File file,int weidth,int heigth){
if(!file.isDirectory()){
return;
}
for(File f:file.listFiles()){
if(f.isFile()){
ImageOperater operater = new ImageOperater(f);
operater.cutNotEqualProportion(weidth, heigth).save();
}else{
//递归处理
Batch(f,weidth,heigth);
}
}
}
}
原始文件:
处理后:
这次顺便也把之前一期给头像加个1也一起做了
查看图片

0 点赞 评论 收藏
分享
landry:抢沙发,最奇葩的莫过于碰到一家奇葩公司,办事差劲,具体哪家不说了,四个字,内部管理很乱很复杂
0 点赞 评论 收藏
分享
0 点赞 评论 收藏
分享
0 点赞 评论 收藏
分享
0 点赞 评论 收藏
分享
向宇同桌:在牛客给大家开了初级,中级,高级项目课。每次课上敲的代码都要练习过3次,保证上课不出错。
0 点赞 评论 收藏
分享
0 点赞 评论 收藏
分享
创作者周榜
更多
关注他的用户也关注了: