1.�滭��վԴ��
2.aiç»å¾è½¯ä»¶åªä¸ªå¥½ç¨
3.第一章 GIMP简介
4.è°è½ç¨JBuilder2006ç¼ä¸ä¸ªç»ç»çå°ç¨åº
5.自由开源的绘画绘画免费绘画软件:Krita
6.手把手教你安装运行AI绘图Stable-Diffution-Webui(Mac OS篇)
�滭��վԴ��
Python,一种简洁且功能强大的网站网站编程语言,以其二十年的源码源码发展历史和成熟的特性,为各种任务提供了便捷。下载它的绘画绘画语法清晰,支持多种编程范式,网站网站杭州ios源码如命令式、源码源码面向对象、下载函数式等,绘画绘画并内置垃圾回收机制。网站网站Python常用于脚本编写和系统管理,源码源码且在各种平台上都能运行,下载可通过工具如py2exe等转换为独立程序。绘画绘画
今年,网站网站社交网络上最火的源码源码并非名人,而是卡通形象小猪佩奇,尤其在短视频和社交网络上迅速走红。网络上涌现了关于小猪佩奇的绘画教程,其中九步画法尤其受到关注。博主尝试用Python的turtle模块,也就是海龟绘图,来挑战绘制小猪佩奇,尽管Python并非绘图专长,HeeksCad源码但这种跨领域的尝试富有挑战性。
博主的海龟作图思路是先设定画板大小,颜色和笔触,然后依次画出小猪佩奇的各个部位。turtle模块通过控制海龟在屏幕上的移动和绘画,使得简单指令就能创造出复杂的图像,是初学者学习Python的有趣方式。以下是一部分代码示例:
对于Python的学习路径,分为基础、进阶和项目实战阶段。基础阶段包括理解Python和面向对象编程,进阶则涉及Linux、Web开发工具和部署技术,框架阶段则学习如web.py、Django和Flask等。实战项目则涵盖了个人博客、微信开发和企业应用等。
想要快速掌握Python,可以加入学习裙++获取更多资源和支持。Python的应用广泛,适合web开发、爬虫,tcsh源码对运维人员的自动化运维和测试也有帮助,而大数据分析和科学计算则需要专业背景,机器学习和人工智能则对学历和数学能力有较高要求。
aiç»å¾è½¯ä»¶åªä¸ªå¥½ç¨
触ç«ãDeepArt.ioãPrismaçã
1ã触ç«æ¯å½å é«äººæ°ç»å¸ä½åå享平å°ï¼ææµ·éæç»å¸å ¥é©»ï¼åæ¶è§¦ç«æ¨åºçAIç»ç»åè½åå强大ï¼é¶åºç¡å°ç½ä¹è½å¿«éææç²¾ç¾çä½åï¼å¹¶ä¸æ¯æä¸é®ä¸è½½ï¼æ°ç¾ä¸ç¨æ·å¨ä¸é¢å享ãåä½ã
2ãDeepArt.ioæ¯ä¸æ¬¾é常强大çAIç»ç»å¹³å°ï¼å¯ä»¥å°ä½ ä¸ä¼ çä»»ä½å¾ç转å为任ä½ä¸å¼ èºæ¯å¤§å¸çåä½é£æ ¼ãæ以ï¼æ³è®©èªå·±ç头ååæä¸å¹ 梵é«çæ²¹ç»ä½åçè¯ï¼é£ä¹DeepArt.ioå°±æ¯ä¸äºéæ©ã
3ãPrismaæ¯ä¸æ¬¾ååæ趣çAIç»ç»å¹³å°ï¼å¯ä»¥å°ç §ç转åæåç§ä¸åçèºæ¯é£æ ¼ï¼å æ¬ææåç«æ´¾ãæ¯å ç´¢ççãèä¸ï¼Prismaè¿é å¤äºè®¸å¤ç¾å¦ç滤éææï¼æ以ç¨æ·å¯ä»¥è½»æ¾å°è®©èªå·±çç §çæ´å åºå½©ã
第一章 GIMP简介
GIMP是一个多平台图像处理工具,功能丰富,可作为简单的绘画程序、专家级的照片修饰工具、创建数字艺术的利器、在线批处理系统、批量图像渲染器以及图像格式转换器等。其强大的可扩展性通过插件实现多样化功能,高级脚本接口则允许用户编写脚本完成复杂图像处理任务。
GIMP是免费的自由软件,遵循通用公共许可证版本 3 [GPL]。这意味着用户可自由访问和修改其源代码。大多数GNU/Linux发行版将其作为标准应用提供,适用于微软视窗™和苹果的macOS™(达尔文)等其他操作系统。
GIMP的开发由Peter Mattis和Peter Mattis启动,并得到了众多贡献者的支持。目前,Mitch Natterer、Jehan Pagès以及其他团队成员在精心策划GIMP的upload源码发布。文档团队提供了丰富的帮助资源,包括用户手册和在线HTML版本帮助文档,使用时按住F1键可访问。
GIMP的特性与功能多样,包括但不限于绘画、图像修饰、艺术创作、批处理、渲染和格式转换。通过不断探索和利用这些功能,用户可以高效地处理各种图像任务,开启图像编辑之旅。
è°è½ç¨JBuilderç¼ä¸ä¸ªç»ç»çå°ç¨åº
import java.awt.*;
import java.awt.event.*;
import java.awt.geom.Point2D;
import java.awt.image.BufferedImage;
import javax.swing.*;
import javax.swing.border.Border;
public class DrawShapes extends JFrame{
private static final long serialVersionUID = L;
//ä½å¾é¢æ¿
private CVS cvs;
//ä½å¾æ¹å¼éæ©æé®
private JToggleButton cycle,line,rect;
private JLabel red,blue,green;
private ButtonGroup bgroup;
//æé®å¸å±é¢æ¿
private JPanel menuPanel;
//å¤ä½æé®
private JButton clean;
public DrawShapes(){
super("DrawShape!");
// this.setResizable(false);
this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
this.setSize(,);
this.setLocationRelativeTo(null);
this.getContentPane().add(cvs=new CVS());
this.initComponents();
}
//åå§åç»ä»¶
private void initComponents() {
this.menuPanel = new JPanel(null);
this.menuPanel.setPreferredSize(new Dimension(,));
this.menuPanel.setBorder(BorderFactory.createLineBorder(Color.gray));
this.getContentPane().add(this.menuPanel,"South");
this.bgroup = new ButtonGroup();
this.cycle = new JToggleButton("åå½¢");
this.cycle.setBounds(,4,,);
this.line = new JToggleButton("ç´çº¿");
this.line.setBounds(,4,,);
this.rect=new JToggleButton("ç©å½¢");
this.rect.setBounds(,4,,);
red = new JLabel();
red.setOpaque(true);
red.setBackground(Color.red);
red.setBounds(,4,,);
blue=new JLabel();
blue.setOpaque(true);
blue.setBackground(Color.blue);
blue.setBounds(,4,,);
green=new JLabel();
green.setBackground(Color.green);
green.setOpaque(true);
green.setBounds(,4,,);
this.menuPanel.add(red);
this.menuPanel.add(blue);
this.menuPanel.add(green);
this.menuPanel.add(cycle);
this.menuPanel.add(line);
this.menuPanel.add(rect);
this.bgroup.add(cycle);
this.bgroup.add(line);
this.bgroup.add(rect);
this.clean = new JButton("æ¸ é¤");
this.clean.setBounds(,4,,);
this.menuPanel.add(clean);
//æé®å¨ä½ä¾¦å¬å¨å®ä¾
ActionListener al = new ActionListener(){
public void actionPerformed(ActionEvent e) {
Object src = e.getSource();
if(src.equals(cycle))
cvs.setSX(S.CYCLE);//ç»å
else if(src.equals(line))
cvs.setSX(S.LINE);//ç»ç´çº¿
else if(src.equals(rect))
cvs.setSX(S.RECTANGLE);//ç»ç©å½¢
else if(src.equals(clean))
cvs.reset();//å¤ä½
}
};
//ç»æé®æ³¨å侦å¬å¨
this.cycle.addActionListener(al);
this.line.addActionListener(al);
this.rect.addActionListener(al);
this.clean.addActionListener(al);
MouseListener ml = new MouseAdapter(){
public void mousePressed(MouseEvent e){
Object s = e.getSource();
Border b = BorderFactory.createLoweredBevelBorder();
if(s.equals(red)){
cvs.setFC(Color.red);
red.setBorder(b);
blue.setBorder(null);
green.setBorder(null);
}
else if(s.equals(blue)){
cvs.setFC(Color.blue);
blue.setBorder(b);
red.setBorder(null);
green.setBorder(null);
}
else if(s.equals(green)){
cvs.setFC(Color.green);
green.setBorder(b);
blue.setBorder(null);
red.setBorder(null);
}
}
};
blue.addMouseListener(ml);
red.addMouseListener(ml);
green.addMouseListener(ml);
}
//ç¨åºå ¥å£
public static void main(String[] aregs) throws Exception{
//è°ç¨ç³»ç»è§è§è®¾ç½®
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName());
SwingUtilities.invokeLater(new Runnable(){
public void run(){
new DrawShapes().setVisible(true);
}
});
}
}
//主ä½å¾é¢æ¿ç±»,å¯æ¥æ¶ä¸è¬é¼ æ äºä»¶åé¼ æ æå¨äºä»¶
class CVS extends Canvas implements MouseListener,MouseMotionListener{
private static final long serialVersionUID = L;
//æå®å¾å½¢ç第ä¸ç¹,æ¯å¦ç©å½¢çè§ç¹,åå½¢çåå¿,ç´çº¿ç第ä¸ç¹
private int x,y;
//ä½å¾å¤§å°
private int w,h;
//ä½å¾ç±»åæ§å¶
private S sx = S.NULL;
//åç¼å²,èæ¯ç¼å²åºå临æ¶ç¼å²åº
private BufferedImage background,buff;
//å¾åæ´æ°æ è®°
private boolean hasChanged;
//èæ¯è²,临æ¶ä½å¾è²,åæ¯è²
private Color bgc = Color.white;
private Color tmpc = Color.gray;
private Color fgc = Color.blue;
public CVS(){
this.addMouseListener(this);
this.addMouseMotionListener(this);
}
//ä½å¾æ§å¶æ¹å¼è®¾ç½®
public void setSX(S s){
sx = s;
}
//æ§å¶ä½å¾é¢è²:
public void setFC(Color c){
fgc=c;
}
//ç»å¶ä¸´æ¶ç¼å²åº
private void drawing(int X,int Y) {
Graphics g = buff.getGraphics();
g.setColor(bgc);
g.clearRect(0,0,w,h);
copyBuffer();
g.setColor(tmpc);
switch(sx){
case CYCLE:
Point p = new Point(x,y);
Point2D p2 = new Point2D.Double(X,Y);
int dist = (int)p.distance(p2);
g.drawOval(x,y,0,0);
g.drawOval(x-dist, y-dist,dist*2,dist*2);
break;
case LINE:
g.drawLine(x,y,X,Y);
break;
case RECTANGLE:
int dx = x-X;
dx = Math.abs(dx);
int dy = y-Y;
dy = Math.abs(dy);
g.drawRect(x<X?x:X,y<Y?y:Y,dx,dy);
break;
}
g.dispose();
drawBufferToCVS();
}
//ç»å¶èæ¯ç¼å²åº
private void drawBuffer(int X,int Y){
Graphics2D gd = background.createGraphics();
gd.setColor(fgc);
gd.setRenderingHint(RenderingHints.KEY_ANTIALIASING,RenderingHints.VALUE_ANTIALIAS_ON);
switch(sx){
case CYCLE:
Point p = new Point(x,y);
Point2D p2 = new Point2D.Double(X,Y);
int dist = (int)p.distance(p2);
gd.drawOval(x,y,0,0);
gd.drawOval(x-dist, y-dist,dist*2,dist*2);
break;
case LINE:
gd.drawLine(x,y,X,Y);
break;
case RECTANGLE:
int dx = x-X;
dx = Math.abs(dx);
int dy = y-Y;
dy = Math.abs(dy);
gd.drawRect(x<X?x:X,y<Y?y:Y,dx,dy);
break;
default:
popupMsg();
}
gd.dispose();
Graphics g = this.getGraphics();
g.clearRect(0,0,w,h);
g.drawImage(background,0,0,null);
g.dispose();
}
private void popupMsg(){
JOptionPane.showMessageDialog(this,"请éæ©ä¸ç§ä½å¾æ¹å¼å¼å§ä½å¾.");
}
//å¤å¶èæ¯ç¼å²åºå 容å°ä¸´æ¶ç¼å²åº
private void copyBuffer(){
Graphics g = buff.getGraphics();
g.drawImage(background,0,0,null);
g.dispose();
}
//å°åºä¸´æ¶ç¼å²åºå 容å°çªå£
private void drawBufferToCVS() {
Graphics g = this.getGraphics();
g.drawImage(buff,0,0,null);
g.dispose();
}
//æ¸ é¤åç¼å²åºå¹¶æ¸ é¤çªå£å 容
public void reset(){
clearContents(buff);
clearContents(background);
Graphics g = this.getGraphics();
g.setColor(bgc);
g.fillRect(0,0,w,h);
g.dispose();
}
//æ¸ é¤æå®ç¼å²åºå 容
private void clearContents(BufferedImage i){
Graphics g = i.getGraphics();
g.setColor(bgc);
g.fillRect(0,0,w,h);
g.dispose();
}
//åå§åç¼å²åº
private void initImages() {
background=new BufferedImage(w,h,BufferedImage.TYPE_INT_RGB);
buff=new BufferedImage(w,h,BufferedImage.TYPE_INT_RGB);
clearContents(background);
clearContents(buff);
}
//éåæ¤æ¹æ³,以便å¨çªå£éæ°æ¾ç¤ºæ¶è½æ£ç¡®æ¾ç¤ºæåçå 容.
public void paint(Graphics g){
// w = this.getWidth();
// h = this.getHeight();
if(background==null){
w = this.getToolkit().getScreenSize().width;
h = this.getToolkit().getScreenSize().height;
initImages();
}
g.drawImage(background,0,0,null);
g.dispose();
}
//åå»ä½å¾åºä¹è½åæ¸ é¤å¨ä½,åµåµ
public void mouseClicked(MouseEvent e) {
if(e.getClickCount()==2)
reset();
}
public void mouseEntered(MouseEvent e) { }
public void mouseExited(MouseEvent e) { }
//æ¯å½æä¸é¼ æ æ¶å°±éæ°è®¾ç½®ç¬¬ä¸ç¹çåæ
public void mousePressed(MouseEvent e) {
this.x=e.getX();
this.y=e.getY();
}
//æ¯å½éæ¾é¼ æ æ¶å°±å³å®æ¯å¦éè¦å°èæ¯ç¼å²åºå°åºå°çªå£
public void mouseReleased(MouseEvent e) {
if(hasChanged){
hasChanged=false;
drawBuffer(e.getX(),e.getY());
}
}
//æ¯å½é¼ æ æå¨æ¶å¼å§ä½å¾
public void mouseDragged(MouseEvent e) {
hasChanged=true;
drawing(e.getX(),e.getY());
}
public void mouseMoved(MouseEvent e) { }
}
//ä½å¾ç±»åçæ举
enum S{
CYCLE,RECTANGLE,LINE,NULL
}
///:~ end
ççè¿ä¸ªæ»¡æä¸
自由开源的免费绘画软件:Krita
寻找一款能够替代Photoshop和SAI的免费绘画软件?Krita可能就是你的理想选择。这款开源软件不仅免费,且支持Windows、macOS和Linux,甚至安卓平板也在测试中。它功能强大,涵盖了绘画的全流程,包括草图、插画、漫画、profisafe 源码动画和3D贴图,具备数位板支持、防抖、图层管理等专业特性,还内置了官方中文版,确保了全球用户的使用体验。
虽然许多人首先会想到业界巨头的付费软件,但Krita的出现打破了常规。Krita并非仅仅追求免费,而是一个遵循自由软件原则的项目,其使用GNU GPL许可证,这意味着用户可以自由地使用、研究和修改源代码,而且社区的开源特性使得它不断进步和改进。尽管它起初可能不如商业软件那样成熟,但随着时间和社区的共同开发,Krita在近年来已经发展成为能够媲美商业化软件的工具。
Krita的界面设计直观,操作方便,尤其适合数字绘画。虽然在早期版本中可能面临一些性能问题,但随着时间的推移,开发者和志愿者们不断优化,现在的Krita已经能满足专业创作的需求。它支持显卡加速、多传感器控制,以及丰富的图层功能,包括色彩管理和HDR支持,甚至可以配合Blender进行纹理制作。
对于那些担心语言问题的用户,Krita的中文翻译工作做得非常到位,从官方网站到软件界面,都有了完整的中文支持。Krita的中文社区虽然相对较弱,但已有中文爱好者在积极贡献,使得更多中国用户能够无缝融入这个国际化的创作平台。
总的来说,Krita以其强大的功能、开放的源代码和友好的社区,为数字艺术家提供了一个免费、可信的创作环境。尽管它可能需要一些适应和学习,但对于追求创新和自由的艺术家来说,Krita无疑是值得尝试的优秀选择。如果你正在寻找一个替代品,不妨考虑一下这款来自全球开发者和艺术家共同维护的软件。
手把手教你安装运行AI绘图Stable-Diffution-Webui(Mac OS篇)
AI绘图领域的热门工具stable-diffusion-webui是Mac用户首选的本地运行平台。由于其开放性、灵活性和高效性,我们将在本文中详细指导你在Mac M1或M2系统上安装并运行它,满足粉丝对新功能的需求。 首先,确保你的设备配置:Mac M1或M2,内存8GB以上,至少GB可用硬盘,GB更佳,且内外网访问流畅。接下来,按步骤操作:在Terminal中安装Homebrew,如果已安装,则跳过。
通过命令行安装Python和Git。
从GitHub克隆stable-diffusion-webui的源代码。
下载基础模型,如stable diffusion 2.0的-v-ema.ckpt。
在launch.py文件中配置国内镜像下载GFPGAN等依赖。
运行webui.sh启动应用,可能需要一段时间下载插件。
访问本地URL .0.0.1:,通过浏览器打开稳定扩散webui界面。
遇到问题时,可参考常见问题解答:免费使用,无需付费,无nsfw限制,无排队等待。
关闭电脑后重开,重复上述步骤即可。
网络问题检查网络连接,如遇下载错误,按指导修改launch.py。
提高绘图质量,可通过下载更多模型包和优化提示词。
切换模型:下载并替换checkpoint文件,刷新选择新模型。
优化速度:调整图像大小,关闭hirex.fix,减少后台占用。
想深入了解提示词编写和更高级功能,后续文章会详细介绍。如有任何疑问,可参考我们的其他教程。 我们已经分享了多个教程,包括Windows和Mac的本地部署方法,以及如何使用Waifu Diffusion。继续探索,掌握AI绘画的魅力吧!参考资料:
可免费使用NovelAI的资源指路(本地版,云端版)
NovelAI源码泄露后,大佬们已提供成熟使用方法。下载G资源,包含多个模型,选择一个适用即可。
本地版推荐使用以下教程安装:AI绘画再次进化!novelai真官网版本解压即用 无需下载!这次1分钟内不用学也能会用 bilibili.com/video/BV1E...
官网版本,一键使用。链接在视频简介,提取码需关注大佬后在私信里得到。
云端版推荐此网站:ai.nya.la/stories(此网站已失效,一键搭建云端版请点击: 靠谱的赳晨:一键搭建NovelAI云端版(使用colab免费服务))。
直接点Sign In 登录,点击Image Generation开始生成图像。如出现“太多请求正在处理,请稍后再试”提示,继续点击Generate,直至无法点击,然后稍等。
本月日(周日)云端版服务即将停止,建议抓紧使用。搭建教程请参考: telegra.ph/NovelAI-%E5%...
历史版本使用方法,建议自行搜索了解。