在这个信息爆炸的时代,了解图形编辑器和图片文字提取器的重要性不言而喻。本文将为您带来全面的解读,助您在这个领域中游刃有余。
有什么好的图片编辑软件
1、AdobePhotoshop
AdobePhotoshop,简称“PS”,是由AdobeSystems开发和发行的图像处理软件。
Photoshop主要处理以像素所构成的数字图像。使用其众多的编修与绘图工具,可以有效地进行图片编辑工作。ps有很多功能,在图像、图形、文字、视频、出版等各方面都有涉及。
2、美图秀秀
美图秀秀是2008年10月8日由厦门美图科技有限公司研发、推出的一款免费图片处理的软件,有iPhone版、Android版、PC版、WindowsPhone版、iPad版及网页版,致力于为全球用户提供专业智能的拍照、修图服务。
美图秀秀的图片特效、美容、拼图、场景、边框、饰品等功能,可以1分钟做出影楼级照片,还能一键分享到新浪微博、人人网、QQ空间等。
3、光影魔术手
款针对图像画质进行改善提升及效果处理的软件;简单、易用,不需要任何专业的图像技术,就可以制作出专业胶片摄影的色彩效果,其具有许多独特之处,如反转片效果、黑白效果、数码补光、冲版排版等‘’。
且其批量处理功能非常强大,是摄影作品后期处理、图片快速美容、数码照片冲印整理时必备的图像处理软件,能够满足绝大部分人照片后期处理的需要。
4、海报工厂
海报工厂是一款专门用于图片设计、美化、拼接、制作的APP软件,海报工厂于2014年7月24日推出公测上市,由美图秀秀官方和数十位国内外知名设计师倾心打造。款款都带范儿。里面拥有杂志封面、电影海报、美食菜单、旅行日志等最潮海报元素,一秒打造视觉大片。
5、PhotoPos(图形编辑器)
一款先进的图片和CG编辑工具,支持多种图片格式、支持扫描仪和数码相机、包括图像增强和编辑工具、Rich文本工具、支持特效、层和蒙版、支持纹理、支持脚本和批量操作.PhotoPosPro是一款高性能的数字图像处理、浏览软件.具有图层、遮罩、脚本、批处理等高级特性.支持大多数扫描仪、数码相机。
参考资料来源:百度百科-图形编辑器
百度百科-美图秀秀
百度百科-光影魔术手
百度百科-AdobePhotoshop
百度百科-海报工厂
cad块编辑器怎么用
块编辑(BEDIT)
如果我们只是需要编辑图块的图形,块编辑的操作非常简单。在块编辑中提供了大量的参数、动作设置,可以给图块设置复杂的动作,可以让图块实现参数化,可以将多个图形合并成一个图块,也可以将一个图块变换成多个图块,块编辑器非常复杂,这里先简单给大家介绍一下操作。
1、创建一个图块或打开一张有图块的图纸,双击一个普通且没有属性文字的图块,软件会弹出块编辑对话框。
2、我们也可以直接输入BEDIT命令或者在命令面板单击块编辑按钮先打开对话框,再在列表中选择我们要编辑的图块。
从预览图和名称确认是我们要编辑的图块后,单击“确定”按钮,进入块编辑器。
3、进入块编辑器后,图形窗口中将只显示图块的图形,同时会显示块编辑器的面板、选项板,如果用经典界面,则会显示快编辑相关的工具栏。
我们可以看到快编辑器有大量的工具,如果要仔细介绍,可以写一本书,这里就不再详细介绍,以后再单独介绍,下面我们只看看修改图形的基本操作。
在块编辑器状态下,我们可以用绘图、修改的各项命令,添加、编辑、删除图形,当图形修改完毕,单击“关闭块编辑器”按钮,如下图所示。
4、软件会提示是否保存对图块所做修改,选择将修改保存到图块,退出块编辑器。
5、退出块编辑后,图形将恢复显示。
参照编辑(REFEDIT)
参照编辑功能是在块编辑之前广泛使用的编辑图块的功能,在没有块编辑器之前,双击图块会进入参照编辑功能。参照编辑功能不仅可以编辑图块,还可以编辑外部参照(XREF),现在版本双击外部参照时还会自动执行参照编辑功能。
参照编辑功能就是可以选择图块插入后的任意一个块参照,通过编辑这个参照来修改图块的定义。参照编辑和块编辑不同的是,当进入参照编辑状态时,其他图形仍然可以显示,我们可以将其他图形添加到图块中,也可以将图块中的图形分离出去。
因为参照编辑时可以看到其他图形,块编辑则不行,而大多数人并不会去定义动态块,因此很多设计人员编辑图块时仍喜欢用参照编辑,而且喜欢将双击图块默认执行的命令改成参照编辑。下面我们简单介绍一下参照编辑的操作。
1、创建一个图块或打开一张有图块的图纸,选择图块,输入命令REFEDIT后回车或者在菜单或工具栏选择参照编辑命令,回车,打开参照编辑对话框。如下图所示。
2、如果我们选择的只是一个简单的图块,列表中将只显示当前图块的名称。我们注意下面有两个关于嵌套图块的选项,所谓嵌套图块,就是一个图块中包含其他图块,比如说桌子和椅子分别是两个独立的图块,我们可以将一张桌子和四把椅子在做成一个桌椅的图块,那么这就成了一个嵌套图块。如果选择的是嵌套图块,这里将显示一个列表,下一级的图块都将列出来,我们可以选择编辑整个图块或者选择其中一个嵌套的图块进行编辑。
此外这个对话框还有一个设置选项卡,里面有三个选项,可以先看一下,主要是最后一个“锁定不在工作集中的对象”会对编辑有一些影响,所谓不在工作集,也就是图块之外的其他图形。
我们采用默认选项,单击确定,关闭参照编辑对话框,进入参照编辑状态,如下图所示。
3、在命令面板中会显示参照编辑的面板,如果用经典界面,会弹出参照编辑工具栏。进入参照编辑状态后,图块内图形正常显示,其他图形会褪色显示,这样可以区别出内外的图形。
我们注意在工具栏中有两个按钮,一个是添加到工作集,一个是从工作集中删除,这就是块编辑无法实现的功能。
3尝试上面两个编辑功能以及其他绘图和编辑命令后,单击保存修改或放弃修改按钮,退出参照编辑功能。
记住参照编辑后必须退出参照编辑功能,当年有很多人用的是经典界面,参照编辑完图块后直接将参照编辑工具栏关掉了,没有退出参照编辑功能,结果发现图纸没法保存了,每次保存都会弹出如下提示。
4、由于参照编辑工具栏被关闭,也不知道关闭参照编辑的命令,就不知道怎么办才好了。现在参照编辑用的人少了,这个问题不那么突出了,但也最好记一下,参照编辑关闭的命令是REFCLOSE,万一遇到了大家就知道怎么解决了。
参照裁剪(XCLIP)
1、XCLIP命令不仅可以裁剪图块,也可以裁剪外部参照,不仅可以将封闭区域外的图块裁剪掉,也可以反向裁剪封闭区域内的图形。有些设计人员会将复杂图形做成图块,然后在不同时间取图块的一部分,此时就可以用XCLIP进行裁剪。这个操作并不复杂,可以裁剪时画编辑,也可以实现画好封闭的多段线,裁剪时选择这条多段线,这里就不在详细介绍了,以后单独再介绍。
增强属性编辑器
如果图块内有属性文字,被称为属性块,双击此类图块时不会弹出块编辑器或参照编辑,而是会弹出增强属性编辑器,因为这类图块通常会修改属性,而不是图形,如下图所示。
小结
1、上面只是简单给大家介绍了图块编辑相关的命令,每种命令都没有展开讲,只是让大家有一个初步了解,如果想了解这些命令的用法,请关注后面发的相关经验。
注意事项:
以上技巧适用于AUTOCAD和浩辰CAD等类似的CAD软件
用JAVA实现的图形编辑器
楼主给你一个我的,直接保存成pb.java编译运行,就是你要的画图功能,可以参考一下
____________________________________________________________________
import java.applet.*;
import java.awt.*;
import java.awt.event.*;
import java.util.*;
import javax.swing.*;
import java.awt.geom.*;
import java.io.*;
class Point implements Serializable
{
int x,y;
Color col;
int tool;
int boarder;
Point(int x, int y, Color col, int tool, int boarder)
{
this.x= x;
this.y= y;
this.col= col;
this.tool= tool;
this.boarder= boarder;
}
}
class paintboard extends Frame implements ActionListener,MouseMotionListener,MouseListener,ItemListener
{
int x=-1, y=-1;
int con= 1;//画笔大小
int Econ= 5;//橡皮大小
int toolFlag= 0;//toolFlag:工具标记
//toolFlag工具对应表:
//(0--画笔);(1--橡皮);(2--清除);
//(3--直线);(4--圆);(5--矩形);
Color c= new Color(0,0,0);//画笔颜色
BasicStroke size= new BasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL);//画笔粗细
Point cutflag= new Point(-1,-1, c, 6, con);//截断标志
Vector paintInfo= null;//点信息向量组
int n= 1;
FileInputStream picIn= null;
FileOutputStream picOut= null;
ObjectInputStream VIn= null;
ObjectOutputStream VOut= null;
//*工具面板--画笔,直线,圆,矩形,多边形,橡皮,清除*/
Panel toolPanel;
Button eraser, drLine,drCircle,drRect;
Button clear,pen;
Choice ColChoice,SizeChoice,EraserChoice;
Button colchooser;
Label颜色,大小B,大小E;
//保存功能
Button openPic,savePic;
FileDialog openPicture,savePicture;
paintboard(String s)
{
super(s);
addMouseMotionListener(this);
addMouseListener(this);
paintInfo= new Vector();
/*各工具按钮及选择项*/
//颜色选择
ColChoice= new Choice();
ColChoice.add("black");
ColChoice.add("red");
ColChoice.add("blue");
ColChoice.add("green");
ColChoice.addItemListener(this);
//画笔大小选择
SizeChoice= new Choice();
SizeChoice.add("1");
SizeChoice.add("3");
SizeChoice.add("5");
SizeChoice.add("7");
SizeChoice.add("9");
SizeChoice.addItemListener(this);
//橡皮大小选择
EraserChoice= new Choice();
EraserChoice.add("5");
EraserChoice.add("9");
EraserChoice.add("13");
EraserChoice.add("17");
EraserChoice.addItemListener(this);
////////////////////////////////////////////////////
toolPanel= new Panel();
clear= new Button("清除");
eraser= new Button("橡皮");
pen= new Button("画笔");
drLine= new Button("画直线");
drCircle= new Button("画圆形");
drRect= new Button("画矩形");
openPic= new Button("打开图画");
savePic= new Button("保存图画");
colchooser= new Button("显示调色板");
//各组件事件监听
clear.addActionListener(this);
eraser.addActionListener(this);
pen.addActionListener(this);
drLine.addActionListener(this);
drCircle.addActionListener(this);
drRect.addActionListener(this);
openPic.addActionListener(this);
savePic.addActionListener(this);
colchooser.addActionListener(this);
颜色= new Label("画笔颜色",Label.CENTER);
大小B= new Label("画笔大小",Label.CENTER);
大小E= new Label("橡皮大小",Label.CENTER);
//面板添加组件
toolPanel.add(openPic);
toolPanel.add(savePic);
toolPanel.add(pen);
toolPanel.add(drLine);
toolPanel.add(drCircle);
toolPanel.add(drRect);
toolPanel.add(颜色); toolPanel.add(ColChoice);
toolPanel.add(大小B); toolPanel.add(SizeChoice);
toolPanel.add(colchooser);
toolPanel.add(eraser);
toolPanel.add(大小E); toolPanel.add(EraserChoice);
toolPanel.add(clear);
//工具面板到APPLET面板
add(toolPanel,BorderLayout.NORTH);
setBounds(60,60,900,600); setVisible(true);
validate();
//dialog for save and load
openPicture= new FileDialog(this,"打开图画",FileDialog.LOAD);
openPicture.setVisible(false);
savePicture= new FileDialog(this,"保存图画",FileDialog.SAVE);
savePicture.setVisible(false);
openPicture.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{ openPicture.setVisible(false);}
});
savePicture.addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{ savePicture.setVisible(false);}
});
addWindowListener(new WindowAdapter()
{
public void windowClosing(WindowEvent e)
{ System.exit(0);}
});
}
public void paint(Graphics g)
{
Graphics2D g2d=(Graphics2D)g;
Point p1,p2;
n= paintInfo.size();
if(toolFlag==2)
g.clearRect(0,0,getSize().width,getSize().height);//清除
for(int i=0; i<n;i++){
p1=(Point)paintInfo.elementAt(i);
p2=(Point)paintInfo.elementAt(i+1);
size= new BasicStroke(p1.boarder,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL);
g2d.setColor(p1.col);
g2d.setStroke(size);
if(p1.tool==p2.tool)
{
switch(p1.tool)
{
case 0://画笔
Line2D line1= new Line2D.Double(p1.x, p1.y, p2.x, p2.y);
g2d.draw(line1);
break;
case 1://橡皮
g.clearRect(p1.x, p1.y, p1.boarder, p1.boarder);
break;
case 3://画直线
Line2D line2= new Line2D.Double(p1.x, p1.y, p2.x, p2.y);
g2d.draw(line2);
break;
case 4://画圆
Ellipse2D ellipse= new Ellipse2D.Double(p1.x, p1.y, Math.abs(p2.x-p1.x), Math.abs(p2.y-p1.y));
g2d.draw(ellipse);
break;
case 5://画矩形
Rectangle2D rect= new Rectangle2D.Double(p1.x, p1.y, Math.abs(p2.x-p1.x), Math.abs(p2.y-p1.y));
g2d.draw(rect);
break;
case 6://截断,跳过
i=i+1;
break;
default:
}//end switch
}//end if
}//end for
}
public void itemStateChanged(ItemEvent e)
{
if(e.getSource()==ColChoice)//预选颜色
{
String name= ColChoice.getSelectedItem();
if(name=="black")
{c= new Color(0,0,0);}
else if(name=="red")
{c= new Color(255,0,0);}
else if(name=="green")
{c= new Color(0,255,0);}
else if(name=="blue")
{c= new Color(0,0,255);}
}
else if(e.getSource()==SizeChoice)//画笔大小
{
String selected= SizeChoice.getSelectedItem();
if(selected=="1")
{
con= 1;
size= new BasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL);
}
else if(selected=="3")
{
con= 3;
size= new BasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL);
}
else if(selected=="5")
{con= 5;
size= new BasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL);
}
else if(selected=="7")
{con= 7;
size= new BasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL);
}
else if(selected=="9")
{con= 9;
size= new BasicStroke(con,BasicStroke.CAP_BUTT,BasicStroke.JOIN_BEVEL);
}
}
else if(e.getSource()==EraserChoice)//橡皮大小
{
String Esize= EraserChoice.getSelectedItem();
if(Esize=="5")
{ Econ= 5*2;}
else if(Esize=="9")
{ Econ= 9*2;}
else if(Esize=="13")
{ Econ= 13*2;}
else if(Esize=="17")
{ Econ= 17*3;}
}
}
public void mouseDragged(MouseEvent e)
{
Point p1;
switch(toolFlag){
case 0://画笔
x=(int)e.getX();
y=(int)e.getY();
p1= new Point(x, y, c, toolFlag, con);
paintInfo.addElement(p1);
repaint();
break;
case 1://橡皮
x=(int)e.getX();
y=(int)e.getY();
p1= new Point(x, y, null, toolFlag, Econ);
paintInfo.addElement(p1);
repaint();
break;
default:
}
}
public void mouseMoved(MouseEvent e){}
public void update(Graphics g)
{
paint(g);
}
public void mousePressed(MouseEvent e)
{
Point p2;
switch(toolFlag){
case 3://直线
x=(int)e.getX();
y=(int)e.getY();
p2= new Point(x, y, c, toolFlag, con);
paintInfo.addElement(p2);
break;
case 4://圆
x=(int)e.getX();
y=(int)e.getY();
p2= new Point(x, y, c, toolFlag, con);
paintInfo.addElement(p2);
break;
case 5://矩形
x=(int)e.getX();
y=(int)e.getY();
p2= new Point(x, y, c, toolFlag, con);
paintInfo.addElement(p2);
break;
default:
}
}
public void mouseReleased(MouseEvent e)
{
Point p3;
switch(toolFlag){
case 0://画笔
paintInfo.addElement(cutflag);
break;
case 1://eraser
paintInfo.addElement(cutflag);
break;
case 3://直线
x=(int)e.getX();
y=(int)e.getY();
p3= new Point(x, y, c, toolFlag, con);
paintInfo.addElement(p3);
paintInfo.addElement(cutflag);
repaint();
break;
case 4://圆
x=(int)e.getX();
y=(int)e.getY();
p3= new Point(x, y, c, toolFlag, con);
paintInfo.addElement(p3);
paintInfo.addElement(cutflag);
repaint();
break;
case 5://矩形
x=(int)e.getX();
y=(int)e.getY();
p3= new Point(x, y, c, toolFlag, con);
paintInfo.addElement(p3);
paintInfo.addElement(cutflag);
repaint();
break;
default:
}
}
public void mouseEntered(MouseEvent e){}
public void mouseExited(MouseEvent e){}
public void mouseClicked(MouseEvent e){}
public void actionPerformed(ActionEvent e)
{
if(e.getSource()==pen)//画笔
{toolFlag= 0;}
if(e.getSource()==eraser)//橡皮
{toolFlag= 1;}
if(e.getSource()==clear)//清除
{
toolFlag= 2;
paintInfo.removeAllElements();
repaint();
}
if(e.getSource()==drLine)//画线
{toolFlag= 3;}
if(e.getSource()==drCircle)//画圆
{toolFlag= 4;}
if(e.getSource()==drRect)//画矩形
{toolFlag= 5;}
if(e.getSource()==colchooser)//调色板
{
Color newColor= JColorChooser.showDialog(this,"调色板",c);
c= newColor;
}
if(e.getSource()==openPic)//打开图画
{
openPicture.setVisible(true);
if(openPicture.getFile()!=null)
{
int tempflag;
tempflag= toolFlag;
toolFlag= 2;
repaint();
try{
paintInfo.removeAllElements();
File filein= new File(openPicture.getDirectory(),openPicture.getFile());
picIn= new FileInputStream(filein);
VIn= new ObjectInputStream(picIn);
paintInfo=(Vector)VIn.readObject();
VIn.close();
repaint();
toolFlag= tempflag;
}
catch(ClassNotFoundException IOe2)
{
repaint();
toolFlag= tempflag;
System.out.println("can not read object");
}
catch(IOException IOe)
{
repaint();
toolFlag= tempflag;
System.out.println("can not read file");
}
}
}
if(e.getSource()==savePic)//保存图画
{
savePicture.setVisible(true);
try{
File fileout= new File(savePicture.getDirectory(),savePicture.getFile());
picOut= new FileOutputStream(fileout);
VOut= new ObjectOutputStream(picOut);
VOut.writeObject(paintInfo);
VOut.close();
}
catch(IOException IOe)
{
System.out.println("can not write object");
}
}
}
}//end paintboard
public class pb
{
public static void main(String args[])
{ new paintboard("画图程序");}
}