① 怎麼用java代碼放大或縮小圖片不失真。
放大圖像不會導致失真,而縮小圖像將不可避免的失真。Java中也同樣是這樣。但java提供了4個縮放的微調選項。image.SCALE_SMOOTH //平滑優先image.SCALE_FAST//速度優先image.SCALE_AREA_AVERAGING //區域均值image.SCALE_REPLICATE //像素復制型縮放image.SCALE_DEFAULT //默認縮放模式調用方法Image new_img=old_img.getScaledInstance(1024, 768, Image.SCALE_SMOOTH);得到一張縮放後的新圖。怎麼用java代碼放大或縮小圖片不失真。
② 如何用Java實現圖形的放大和縮小
java實現圖形的放大和縮小,其實就是在畫圖時,改變圖片的長和寬。以下代碼參考一下:
importjava.awt.Graphics;
importjava.awt.MouseInfo;
importjava.awt.Point;
importjava.awt.event.ActionEvent;
importjava.awt.event.ActionListener;
importjava.awt.event.MouseEvent;
importjava.awt.event.MouseListener;
importjava.io.File;
importjavax.swing.ImageIcon;
importjavax.swing.JButton;
importjavax.swing.JFileChooser;
importjavax.swing.JFrame;
importjavax.swing.JPanel;
importjavax.swing.filechooser.FileNameExtensionFilter;
,ActionListener{
intx=0;
inty=0;
File[]selectedFiles=null;
intfileIndex=0;
intwidth=200;
intheight=200;
publicApp(){
setDefaultCloseOperation(EXIT_ON_CLOSE);
setLocationRelativeTo(null);
setSize(400,300);
setResizable(false);
getContentPane().setLayout(null);
JPanelpanel=newImagePanel();
panel.setBounds(12,40,370,218);
getContentPane().add(panel);
addMouseListener(this);
JButtonbtnBrowse=newJButton("Browse");
btnBrowse.addActionListener(this);
btnBrowse.setBounds(12,9,91,21);
getContentPane().add(btnBrowse);
setVisible(true);
}
publicstaticvoidmain(String[]args){
newApp();
}
publicvoidactionPerformed(ActionEvente){
JFileChooserchooser=newJFileChooser();
chooser.setMultiSelectionEnabled(true);
FileNameExtensionFilterfilter=newFileNameExtensionFilter(
"JPG&GIFImages","jpg","gif");
//設置文件類型
chooser.setFileFilter(filter);
//打開選擇器面板
intreturnVal=chooser.showOpenDialog(this);
if(returnVal==JFileChooser.APPROVE_OPTION){
selectedFiles=chooser.getSelectedFiles();
repaint();
}
}
publicvoidmouseClicked(MouseEvente){
}
publicvoidmouseEntered(MouseEvente){
}
publicvoidmouseExited(MouseEvente){
}
publicvoidmousePressed(MouseEvente){
Pointpoint=MouseInfo.getPointerInfo().getLocation();
x=point.x;
y=point.y;
}
publicvoidmouseReleased(MouseEvente){
Pointpoint=MouseInfo.getPointerInfo().getLocation();
intthisX=point.x;
intthisY=point.y;
System.out.println("thisX="+thisX+""+"thisY="+thisY);
if((y-thisY<20&&y-thisY>0)
||(y-thisY<0&&y-thisY>-20)){
//Y在20范圍內移動認為是水平移動
if(x<thisX){
//right
if(selectedFiles!=null
&&fileIndex<selectedFiles.length-1){
fileIndex++;
}
}else{
//left
if(selectedFiles!=null&&fileIndex>0){
fileIndex--;
}
}
}else{
if(x<thisX){
//右下
width+=20;
height+=20;
}else{
//左上
width-=20;
height-=20;
}
}
repaint();
}
classImagePanelextendsJPanel{
publicvoidpaint(Graphicsg){
super.paint(g);
if(selectedFiles!=null){
ImageIconicon=newImageIcon(selectedFiles[fileIndex]
.getPath());
g.drawImage(icon.getImage(),0,0,width,height,this);
}
}
}
}
③ java中怎麼設置大小圖片
具體步驟如下所示:
1、打開電腦,進入軟體中,編寫設置大小的代碼,代碼如下所示。
④ java圖片壓縮不失真的方法-java如何實現把一個大圖片壓縮到指定大小的圖片且長寬比不變
java是怎麼實現等比例縮小圖片而不失真的啊?按照等比例的長寬進行縮放就可以了呀,就好像你打開一個圖片,一般都有縮放功能,原理是一樣的,等比例的縮放,關鍵像素還是存在的。
java如何實現把一個大圖片壓縮到指定大小的圖片且長寬比不變也就是圖片壓縮,可以不修改任何大小的壓縮(速度快),也可等比例修改大小壓縮(較慢)
下面這是一段等比例縮小圖片的方法。
publicStringcompressPic(StringinputDir,StringoutputDir,
StringinputFileName,StringoutputFileName,intwidth,
intheight,booleangp,Stringhzm){
try{
if(!()){
return"";
}
Imageimg=(image);
//判斷圖片格式是否正確
if((null)==-1){
return"no";
}else{
intnewWidth;intnewHeight;
//判斷是否是等比縮放
if(gp==true){
//為等比縮放計算輸出的圖片寬度及高度
doublerate1=((double)(null))/(double)width;
doublerate2=((double)(null))/(double)height;
//根據縮放比率大的進行縮放控制
doublerate=rate1>rate2?rate1:rate2;
newWidth=(int)(((double)(null))/rate);
newHeight=(int)(((double)(null))/rate);
}else{
newWidth=(null);//輸出的圖片寬度
newHeight=(null);//輸出的圖片高度
}
BufferedImagetag=newBufferedImage((int)newWidth,(int)newHeight,_INT_RGB);
/*
*_SMOOTH的縮略演算法生成縮略圖片的平滑度的
*優先順序比速度高生成的圖片質量比較好但速度慢
*/
Imageim=(newWidth,newHeight,_SMOOTH);
().drawImage(im,0,0,null);
FileOutputStreamout=newFileOutputStream(outputDir+outputFileName);
//JPEGImageEncoder可適用於其他圖片類型的轉換
JPEGImageEncoderencoder=(out);
(tag);
();
}
}catch(IOExceptionex){
();
}
return"ok";
}
求助java壓縮圖片存儲大小的方法可以使用Draw這個類,通過改變像素來改變存儲大小,實例如下:
public_tatic_oolean_ompressPic(String_rcFilePath,_tring_escFilePath)_hrows_OException_
____File_ile=_ull;
____BufferedImage_rc=_ull;
____FileOutputStream_ut=_ull;
____ImageWriter_mgWrier;
____ImageWriteParam_mgWriteParams;
____//_付ㄐ賜計姆絞轎_jpg
____imgWrier=("jpg").next();
____imgWriteParams=_ew(
________null);
____//_褂醚顧,必須指定壓縮方式為MODE_EXPLICIT
____(_EXPLICIT);
____//_飫鎦付ㄑ顧醯某潭,參數qality是取值0~1范圍內,
____((float)1);
____(_DISABLED);
____ColorModel_olorModel=(new_ile(srcFilePath)).getColorModel();//();
____//_付ㄑ顧跏筆褂玫納誓J
//____(new(
//________colorModel,(16,16)));
____(new(
________colorModel,(16,16)));
____try_
______if(isBlank(srcFilePath))_
________return_alse;
______}_lse_
________file=_ew_ile(srcFilePath);(());
________src=(file);
________out=_ew_ileOutputStream(descFilePath);
________();
________//_匭胂戎付_out值,才能調用write方法,_mageOutputStream可以通過任何
________//_utputStream構造
________((out));
________//_饔_rite方法,就可以向輸入流寫圖片
________(null,_ew_IOImage(src,_ull,_ull),
____________imgWriteParams);
________();
________();
______}
____}_atch(Exception_)_
______e.printStackTrace();
______return_alse;
____}
____return_rue;
__}
public_tatic_oolean_sBlank(String_tring)_
____if(string==_ull_|()==0_|().equals(""))_
______return_rue;
____}
____return_alse;
__}
⑤ java上傳圖片 生成縮略圖,如果上傳的圖片尺寸比較小就壓縮處理
//將圖按比例縮小。
public static BufferedImage resize(BufferedImage source, int targetW, int targetH) {
// targetW,targetH分別表示目標長和寬
int type = source.getType();
BufferedImage target = null;
double sx = (double) targetW / source.getWidth();
double sy = (double) targetH / source.getHeight();
//這里想實現在targetW,targetH范圍內實現等比縮放。如果不需要等比縮放
//則將下面的if else語句注釋即可
if(sx>sy)
{
sx = sy;
targetW = (int)(sx * source.getWidth());
}else{
sy = sx;
targetH = (int)(sy * source.getHeight());
}
if (type == BufferedImage.TYPE_CUSTOM) { //handmade
ColorModel cm = source.getColorModel();
WritableRaster raster = cm.(targetW, targetH);
boolean alphaPremultiplied = cm.isAlphaPremultiplied();
target = new BufferedImage(cm, raster, alphaPremultiplied, null);
} else
target = new BufferedImage(targetW, targetH, type);
Graphics2D g = target.createGraphics();
//smoother than exlax:
g.setRenderingHint(RenderingHints.KEY_RENDERING, RenderingHints.VALUE_RENDER_QUALITY );
g.drawRenderedImage(source, AffineTransform.getScaleInstance(sx, sy));
g.dispose();
return target;
}
public static void saveImageAsJpg (String fromFileStr,String saveToFileStr,int width,int hight)
throws Exception {
BufferedImage srcImage;
// String ex = fromFileStr.substring(fromFileStr.indexOf("."),fromFileStr.length());
String imgType = "JPEG";
if (fromFileStr.toLowerCase().endsWith(".png")) {
imgType = "PNG";
}
// System.out.println(ex);
File saveFile=new File(saveToFileStr);
File fromFile=new File(fromFileStr);
srcImage = ImageIO.read(fromFile);
if(width > 0 || hight > 0)
{
srcImage = resize(srcImage, width, hight);
}
ImageIO.write(srcImage, imgType, saveFile);
}
public static void main (String argv[]) {
try{
//參數1(from),參數2(to),參數3(寬),參數4(高)
saveImageAsJpg("C:\\Documents and Settings\\xugang\\桌面\\tmr-06.jpg",
"C:\\Documents and Settings\\xugang\\桌面\\2.jpg",
120,120);
} catch(Exception e){
e.printStackTrace();
}
}