<sect1 id="developers-scripting"> <title >Script</title> <para >In &krita;, puoi scrivere script in Ruby o Python (la disponibilità degli interpreti potrebbe dipendere dalla tua distribuzione o da cosa ha installato il tuo amministratore). Qui vedrai una descrizione dell'API degli script. </para ><para >Alcuni esempi sono distribuiti con &krita;, e potresti trovarli sotto <filename >/usr/share/apps/krita/scripts</filename > (o <filename >/opt/kde/share/apps/krita/scripts</filename >). </para> <sect2 id="developers-scripting-variables"> <title >Variabili nel modulo <classname >Krosskritacore</classname ></title> <itemizedlist> <listitem ><para ><varname >KritaDocument</varname > restituisce un oggetto <classname >Document</classname ></para ></listitem> <listitem ><para ><varname >KritaScript</varname > restituisce un oggetto <classname >ScriptProgress</classname ></para ></listitem> </itemizedlist> <para >Puoi recuperare un oggetto usando la funzione <function >get</function > del modulo <classname >Krosskritacore</classname >, in Ruby dovrai fare qualcosa come: <programlisting >doc = Krosskritacore::get("DocumentoDiKrita") script = Krosskritacore::get("ScriptDiKrita") </programlisting> </para> </sect2> <sect2 id="developers-scripting-functions"> <title >Funzioni nel modulo <classname >Krosskritacore</classname ></title> <itemizedlist> <listitem ><para >Funzione: <function >getBrush</function ></para ><para >Questa funzione restituisce un <classname >Brush</classname > preso dall'elenco delle risorse di &krita;. Prende un argomento: il nome del pennello. Per esempio (in Ruby): <programlisting >Krosskritacore::getBrush("Circle (05)") </programlisting ></para ></listitem> <listitem ><para >Funzione: <function >getFilter</function ></para ><para >Questa funzione restituisce un <classname >Filter</classname > preso dall'elenco delle risorse di &krita;. Prende un argomento: il nome del filtro. Per esempio (in Ruby): <programlisting >Krosskritacore::getFilter("invert") </programlisting ></para ></listitem> <listitem ><para >Funzione: <function >getPattern</function ></para ><para >Questa funzione restituisce un <classname >Pattern</classname > preso dall'elenco delle risorse di &krita;. Prende un argomento: il nome del motivo. Per esempio (in Ruby): <programlisting >Krosskritacore::getPattern("Bricks") </programlisting ></para ></listitem> <listitem ><para >Funzione: <function >loadBrush</function ></para ><para >Questa funzione carica un <classname >Brush</classname > e lo restituisce. Prende un argomento: il nome file del pennello.</para ></listitem> <listitem ><para >Funzione: <function >loadPattern</function ></para ><para >Questa funzione carica un <classname >Pattern</classname > e lo restituisce. Prende un argomento: il nome file del motivo.</para ></listitem> <listitem ><para >Funzione: <function >newCircleBrush</function ></para ><para >Questa funzione restituisce un <classname >Brush</classname > di forma circolare. Prende almeno due argomenti: larghezza e altezza. Ne può prendere altri due: larghezza e altezza della sfumatura. Se la sfumatura non è specificata, non verrà usata. Per esempio (in Ruby): <programlisting >Krosskritacore::newCircleBrush(10,20) # crea un cerchio semplice Krosskritacore::newCircleBrush(10,20,5,10) # crea una sfumatura </programlisting ></para ></listitem> <listitem ><para >Funzione: <function >newHSVColor</function ></para ><para >Questa funzione restituisce un nuovo <classname >Color</classname > con la tripletta HSV data. Prende tre argomenti: componente di tonalità (da 0 a 255), componente di saturazione (da 0 a 255), componente di valore (da 0 a 255). Per esempio (in Ruby): <programlisting >Krosskritacore::newHSVColor(255,125,0) </programlisting ></para ></listitem> <listitem ><para >Funzione: <function >newImage</function ></para ><para >Questa funzione restituisce un nuovo <classname >Image</classname >. Prende quattro argomenti: larghezza, altezza, identificativo dello spazio dei colori, nome dell'immagine. In cambio ottieni un oggetto <classname >Image</classname >. Per esempio (in Ruby): <programlisting >Krosskritacore::newImage(10,20, "RGBA", "kikoo") </programlisting ></para ></listitem> <listitem ><para >Funzione: <function >newRectBrush</function ></para ><para >Questa funzione restituisce un nuovo <classname >Brush</classname > di forma rettangolare. Prende almeno due argomenti: larghezza e altezza. Può prenderne altri due: larghezza e altezza della sfumatura. Se la sfumatura non è specificata, non verrà usata. Per esempio (in Ruby): <programlisting >Krosskritacore::newRectBrush(10,20) # crea un rettangolo semplice Krosskritacore::newRectBrush(10,20,5,10) # crea una sfumatura </programlisting ></para ></listitem> <listitem ><para >Funzione: <function >newRGBColor</function ></para ><para >Questa funzione restituisce un nuovo <classname >Color</classname > con la tripletta RGB data. Prende tre argomenti: componente del rosso (da 0 a 255), componente del verde (da 0 a 255), componente del blu (da 0 a 255). Per esempio (in Ruby): <programlisting >Krosskritacore::newRGBColor(255,0,0) # crea un colore rosso Krosskritacore::newRGBColor(255,255,255) # crea un colore bianco </programlisting ></para ></listitem> </itemizedlist> </sect2> <sect2 id="developers-scripting-objects"> <title >Descrizioni ed elenchi di funzioni per vari oggetti in <classname >Krosskritacore</classname ></title> <itemizedlist> <listitem ><para >Oggetto: PaintLayer</para> <itemizedlist> <listitem ><para >Funzione: <function >beginPainting</function ></para ></listitem> <listitem ><para >Funzione: <function >convertToColorspace</function ></para ><para >Converte l'immagine in uno spazio di colori. Questa funzione prende un argomento: il nome dello spazio di colori di destinazione. Per esempio (in Ruby): <programlisting >image.convertToColorspace("CMYK") </programlisting ></para ></listitem> <listitem ><para >Funzione: <function >createHistogram</function ></para ><para >Questa funzione crea un istogramma per questo livello. Prende due argomenti: il tipo di istogramma ("RGB8HISTO"), e 0 se l'istogramma è lineare, o 1 se è logaritmico.</para ></listitem> <listitem ><para >Funzione: <function >createHLineIterator</function ></para ><para >Crea un iteratore su un livello, itererà su una riga. Questa funzione prende tre argomenti: <varname >x</varname > (inizio sulla riga), <varname >y</varname > (posizione verticale della riga), larghezza della riga.</para ></listitem> <listitem ><para >Funzione: <function >createPainter</function ></para ><para >Questa funzione crea un <classname >Painter</classname > che ti permetterà di disegnare sul livello. </para ></listitem> <listitem ><para >Funzione: <function >createRectIterator</function ></para ><para >Crea un iteratore su un livello, itererà su un'area rettangolare. Questa funzione prende quattro argomenti: <varname >x</varname >, <varname >y</varname >, larghezza e altezza del rettangolo.</para ></listitem> <listitem ><para >Funzione: <function >createVLineIterator</function ></para ><para >Crea un iteratore su un livello, itererà su una colonna. Questa funzione prende tre argomenti: <varname >x</varname > (posizione orizzontale della colonna), <varname >y</varname > (inizio nella colonna), altezza della colonna.</para ></listitem> <listitem ><para >Funzione: <function >endPainting</function ></para ><para >Questa funzione chiude la voce di annullamento attuale e la aggiunge alla cronologia.</para ></listitem> <listitem ><para >Funzione: <function >fastWaveletTransformation</function ></para ><para >Restituisce la trasformata veloce wavelet del livello.</para ></listitem> <listitem ><para >Funzione: <function >fastWaveletUntransformation</function ></para ><para >Detrasforma un wavelet veloce in questo livello. Prende un argomento: un oggetto wavelet. Per esempio (in Ruby): <programlisting >wavelet = layer.fastWaveletTransformation() layer.fastWaveletUntransformation(wavelet) </programlisting ></para ></listitem> <listitem ><para >Funzione: <function >getHeight</function ></para ><para >Restituisce l'altezza del livello.</para ></listitem> <listitem ><para >Funzione: <function >getWidth</function ></para ><para >Restituisce la larghezza del livello.</para ></listitem> </itemizedlist> </listitem> <listitem ><para >Oggetto: <classname >Filter</classname ></para> <itemizedlist> <listitem ><para >Funzione: <function >getFilterConfiguration</function ></para ><para >Questa funzione restituisce il <classname >FilterConfiguration</classname > associato con questo filtro.</para ></listitem> <listitem ><para >Funzione: <function >process</function ></para ><para >Questa funzione applicherà il filtro. Prende almeno un argomento: il livello sorgente. Puoi anche usare questi quattro argomenti: <varname >x</varname >, <varname >y</varname >, <varname >width</varname >, <varname >height</varname >. (<varname >x</varname >, <varname >y</varname >, <varname >width</varname >, <varname >height</varname >) definisce l'area rettangolare su cui il filtro sarà calcolato. Se il rettangolo non è definito, il filtro sarà applicato su tutto il livello originario. Per esempio (in Ruby) <programlisting >doc = Krosskritacore::get("DocumentoKrita") image = doc.getImage() layer = image.getActivePaintLayer() width = layer.getWidth() height = layer.getHeight() filter = Krosskritacore::getFilter("invert") filter.process(layer, layer) filter.process(layer, layer, 10, 10, 20, 20) </programlisting ></para ></listitem> </itemizedlist ></listitem> <listitem ><para >Oggetto: <classname >FilterConfiguration</classname ></para> <itemizedlist> <listitem ><para >Funzione: <function >getProperty</function ></para ><para >Questa funzione restituisce il valore del parametro del <classname >Filter</classname > associato. Prende un argomento: il nome del parametro.</para ></listitem> <listitem ><para >Funzione: <function >setProperty</function ></para ><para >Questa funzione definisce un parametro del <classname >Filter</classname > associato. Prende due argomenti: il nome e il valore del parametro, il cui tipo dipende dal <classname >Filter</classname >.</para ></listitem> </itemizedlist> </listitem> <listitem ><para >Oggetto: <classname >Histogram</classname ></para> <para >Questa classe ti permette di accedere all'istogramma di un <classname >PaintLayer</classname >. Esempio (in Ruby): <programlisting >doc = krosskritacore::get("DocumentoKrita") image = doc.getImage() layer = image.getActiveLayer() histo = layer.createHistogram("RGB8HISTO",0) min = layer.getMin() * 255 max = layer.getMax() * 255 for i in min..max print layer.getValue(i) print "\n" end </programlisting> </para> <itemizedlist> <listitem ><para >Funzione: <function >getChannel</function ></para ><para >Restituisce il canale selezionato.</para ></listitem> <listitem ><para >Funzione: <function >getCount</function ></para ><para >Questa funzione restituisce il numero di pixel usati dall'istogramma.</para ></listitem> <listitem ><para >Funzione: <function >getHighest</function ></para ><para >Questa funzione restituisce il valore massimo dell'istogramma.</para ></listitem> <listitem ><para >Funzione: <function >getLowest</function ></para ><para >Questa funzione restituisce il valore minimo dell'istogramma.</para ></listitem> <listitem ><para >Funzione: <function >getMax</function ></para ><para >Questa funzione restituisce il limite massimo dell'istogramma (i valori a posizioni maggiori del massimo sono nulli). Il valore è nell'intervallo 0,0–1,0.</para ></listitem> <listitem ><para >Funzione: <function >getMean</function ></para ><para >Questa funzione restituisce la media dell'istogramma.</para ></listitem> <listitem ><para >Funzione: <function >getMin</function ></para ><para >Questa funzione restituisce il limite minimo dell'istogramma (i valori a posizioni inferiori del minimo sono nulli). Il valore è nell'intervallo 0,0–1,0.</para ></listitem> <listitem ><para >Funzione: <function >getNumberOfBins</function ></para ><para >Restituisce il numero di colonne dell'istogramma. </para ></listitem> <listitem ><para >Funzione: <function >getTotal</function ></para ><para >Questa funzione restituisce la somma di tutti i valori dell'istogramma.</para ></listitem> <listitem ><para >Funzione: <function >getValue</function ></para ><para >Restituisce il valore di una colonna dell'istogramma. Questa funzione prende un argomento: l'indice, nell'intervallo [0..255].</para ></listitem> <listitem ><para >Funzione: <function >setChannel</function ></para ><para >Seleziona il canale del livello da cui ottenere il risultato dell'istogramma. Questa funzione prende un argomento: il numero del canale.</para ></listitem> </itemizedlist> </listitem> <listitem ><para >Oggetto: <classname >ScriptProgress</classname ></para> <para ><classname >ScriptProgress</classname > viene usato per gestire la barra di avanzamento della barra di stato di &krita;. Per esempio (in Ruby): <programlisting >script = Krosskritacore::get("KritaScript") script.setProgressTotalSteps(1000) script.setProgressStage("progressive", 0) for i in 1..900 script.incProgress() end script.setProgressStage("brutal", 1000) </programlisting ></para> <itemizedlist> <listitem ><para >Funzione: <function >incProgress</function ></para ><para >Questa funzione incrementa l'avanzamento di un passo.</para ></listitem> <listitem ><para >Funzione: <function >setProgress</function ></para ><para >Questa funzione imposta il valore dell'avanzamento. Prende un argomento: il valore dell'avanzamento.</para ></listitem> <listitem ><para >Funzione: <function >setProgressStage</function ></para ><para >Questa funzione imposta il valore dell'avanzamento e visualizza il testo.</para ></listitem> <listitem ><para >Funzione: <function >setProgressTotalSteps</function ></para ><para >Questa funzione imposta il numero di passi richiesti dallo script. Le serve un argomento: il valore massimo dell'avanzamento.</para ></listitem> </itemizedlist> </listitem> <listitem ><para >Oggetto: <classname >Wavelet</classname ></para ><para >Questo oggetto contiene i coefficienti di una trasformazione wavelet di un <classname >PaintLayer</classname >.</para> <itemizedlist> <listitem ><para >Funzione: <function >getDepth</function ></para ><para >Restituisce la profondità del livello.</para ></listitem> <listitem ><para >Funzione: <function >getNCoeff</function ></para ><para >Restituisce il valore dell'ennesimo coefficiente. La funzione prende un argomento: l'indice del coefficiente.</para ></listitem> <listitem ><para >Funzione: <function >getNumCoeffs</function ></para ><para >Restituisce il numero di coefficienti in questo wavelet (= dimensione × dimensione × profondità).</para ></listitem> <listitem ><para >Funzione: <function >getSize</function ></para ><para >Restituisce la dimensione del wavelet (dimensione = larghezza = altezza).</para ></listitem> <listitem ><para >Funzione: <function >getXYCoeff</function ></para ><para >Restituisce il valore di un coefficiente. La funzione prende due argomenti: <varname >x</varname > e <varname >y</varname >.</para ></listitem> <listitem ><para >Funzione: <function >setNCoeff</function ></para ><para >Imposta il valore dell'ennesimo coefficiente. La funzione prende due argomenti: l'indice del coefficiente e il suo nuovo valore.</para ></listitem> <listitem ><para >Funzione: <function >setXYCoeff</function ></para ><para >Imposta il valore di un coefficiente. La funzione prende tre argomenti: <varname >x</varname >, <varname >y</varname > e il nuovo valore del coefficiente.</para ></listitem> </itemizedlist> </listitem> <listitem ><para >Oggetto: <classname >Painter</classname ></para> <itemizedlist> <listitem ><para >Funzione: <function >convolve</function ></para ><para >Questa funzione applica un nucleo di convoluzione a un'immagine. Prende almeno tre argomenti: un elenco di nuclei (tutti gli elenchi devono avere le stesse dimensioni), fattore e scostamento. </para ><para >Il valore di un pixel sarà dato dalla funzione seguente: K×P/fattore+scostamento, dove K è il nucleo e P l'intorno. </para ><para >Può prendere i seguenti argomenti opzionali: <varname >borderOp</varname > (controlla quanto convolvere i pixel sul bordo di un'immagine: 0 = usa il colore predefinito, 1 = usa il pixel sul lato opposto dell'immagine, 2 = usa il pixel del bordo, 3 = evita i bordi dei pixel). <varname >channel</varname > (1 per colore, 2 per alfa, 3 per entrambi), <varname >x</varname >, <varname >y</varname >, <varname >width</varname >, <varname >height</varname >.</para ></listitem> <listitem ><para >Funzione: <function >setFillThreshold</function ></para ><para >Imposta la soglia di riempimento. Prende un solo argomento: la soglia.</para ></listitem> <listitem ><para >Funzione: <function >fillColor</function ></para ><para >Inizia a riempire con un colore. Prende due argomenti: <varname >x</varname > e <varname >y</varname >.</para ></listitem> <listitem ><para >Funzione: <function >fillPattern</function ></para ><para >Inizia a riempire con un motivo. Prende due argomenti: <varname >x</varname > e <varname >y</varname >.</para ></listitem> <listitem ><para >Funzione: <function >paintPolyline</function ></para ><para >Questa funzione disegnerà una polilinea. Prende due argomenti: un elenco di posizioni x e un elenco di posizioni y.</para ></listitem> <listitem ><para >Funzione: <function >paintLine</function ></para ><para >Questa funzione disegnerà una linea. Prende cinque argomenti: <varname >x1</varname >, <varname >y1</varname >, <varname >x2</varname >, <varname >y2</varname >, e <varname >pressure</varname >. </para ></listitem> <listitem ><para >Funzione: <function >paintBezierCurve</function ></para ><para >Questa funzione disegnerà una curva di Bezier. Prende dieci argomenti: <varname >x1</varname >, <varname >y1</varname >, <varname >p1</varname >, <varname >cx1</varname >, <varname >cy1</varname >, <varname >cx2</varname >, <varname >cx2</varname >, <varname >x2</varname >, <varname >y2</varname >, <varname >p2</varname >, dove (<varname >x1</varname >,<varname >y1</varname >) è la posizione iniziale, <varname >p1</varname > è la pressione all'inizio, (<varname >x2</varname >,<varname >y2</varname >) è la posizione finale, <varname >p2</varname > è la pressione alla fine. (<varname >cx1</varname >,<varname >cy1</varname >) e (<varname >cx2</varname >,<varname >cy2</varname >) sono le posizioni ai punti di controllo.</para ></listitem> <listitem ><para >Funzione: <function >paintEllipse</function ></para ><para >Questa funzione disegnerà un ellisse. Prende cinque argomenti <varname >x1</varname >, <varname >y1</varname >, <varname >x2</varname >, <varname >y2</varname >, <varname >pressure</varname >, dove (<varname >x1</varname >,<varname >y1</varname >) e (<varname >x2</varname >,<varname >y2</varname >) sono le posizioni dei due centri.</para ></listitem> <listitem ><para >Funzione: <function >paintPolygon</function ></para ><para >Questa funzione disegnerà un poligono. Prende due argomenti: un elenco di posizioni x e un elenco di posizioni y.</para ></listitem> <listitem ><para >Funzione: <function >paintRect</function ></para ><para >Questa funzione disegnerà un rettangolo. Prende cinque argomenti: <varname >x</varname >, <varname >y</varname >, <varname >width</varname > <varname >height</varname >, <varname >pressure</varname >.</para ></listitem> <listitem ><para >Funzione: <function >paintAt</function ></para ><para >Questa funzione disegnerà in un certo punto. Prende tre argomenti: <varname >x</varname >, <varname >y</varname >, <varname >pressure</varname >.</para ></listitem> <listitem ><para >Funzione: <function >setPaintColor</function ></para ><para >Questa funzione imposta il colore del tratto (detto anche colore di primo piano). Prende un argomento: un <classname >Color</classname >.</para ></listitem> <listitem ><para >Funzione: <function >setBackgroundColor</function ></para ><para >Questa funzione imposta il colore di sfondo. Prende un argomento: un <classname >Color</classname >.</para ></listitem> <listitem ><para >Funzione: <function >setPattern</function ></para ><para >Questa funzione imposta il motivo usato per lo riempimento. Prende un argomento: un oggetto <classname >Pattern</classname >.</para ></listitem> <listitem ><para >Funzione: <function >setBrush</function ></para ><para >Questa funzione imposta il pennello usato per disegnare. Prende un argomento: un oggetto <classname >Brush</classname >.</para ></listitem> <listitem ><para >Funzione: <function >setPaintOp</function ></para ><para >Questa funzione definisce l'operazione di disegno. Prende un argomento: il nome dell'operazione.</para ></listitem> <listitem ><para >Funzione: <function >setDuplicateOffset</function ></para ><para >Questa funzione definisce lo scostamento del duplicato. Prende due argomenti: lo scostamento orizzontale e quello verticale.</para ></listitem> <listitem ><para >Funzione: <function >setOpacity</function ></para ><para >Questa funzione imposta l'opacità del disegno. Prende un argomento: l'opacità, in un intervallo da 0 a 255.</para ></listitem> <listitem ><para >Funzione: <function >setStrokeStyle</function ></para ><para >Questa funzione imposta lo stile del tratto. Prende un argomento: 0 per nessuno, 1 per pennello.</para ></listitem> <listitem ><para >Funzione: <function >setFillStyle</function ></para ><para >Questa funzione imposta lo stile di riempimento del <classname >Painter</classname >. Prende un argomento: 0 per nessuno, 1 per riempire con il colore di primo piano, 2 per riempire con il colore di sfondo, 3 per riempire con un motivo.</para ></listitem> </itemizedlist> </listitem> <listitem ><para >Oggetto: <classname >Iterator</classname ></para ><para >Questo oggetto ti permette di cambiare i valori dei pixel uno alla volta. Il nome di alcune funzioni dipende dallo spazio dei colori; per esempio, se lo spazio dei colori del livello è RGB, avrai <function >setR</function >, <function >setG</function > e <function >setB</function >, e per CMYK: <function >setC</function >, <function >setM</function >, <function >setY</function > e <function >setK</function >. Nella documentazione sotto assumeremo che lo spazio viene chiamato ABC, con tre canali: A, B e C.</para> <itemizedlist> <listitem ><para >Funzioni: <function >setA</function >, <function >setB</function >, <function >setC</function ></para ><para >Queste funzioni prendono un argomento: il nuovo valore di uno dei canali di questo pixel.</para ></listitem> <listitem ><para >Funzione: <function >setABC</function ></para ><para >Imposta il valore di tutti i canali. Questa funzione prende un argomento: un array con i nuovi valori di tutti i canali.</para ></listitem> <listitem ><para >Funzioni: <function >getA</function >, <function >getB</function >, <function >getC</function ></para ><para >Restituisce il valore di uno dei canali di questo pixel.</para ></listitem> <listitem ><para >Funzione: <function >getABC</function ></para ><para >Restituisce un array con i valori di tutti i canali.</para ></listitem> <listitem ><para >Funzione: <function >darken</function ></para ><para >Scurisci un pixel. Questa funzione prende almeno un argomento: <varname >shade</varname > (quantità usata per scurire tutti i canali dei colori). Questa funzione può prendere il seguente argomento opzionale: <varname >compensation</varname > (per limitare l'oscuramento).</para ></listitem> <listitem ><para >Funzione: <function >invertColor</function ></para ><para >Inverti il colore di un pixel.</para ></listitem> <listitem ><para >Funzione: <function >next</function ></para ><para >Aumenta la posizione, vai al prossimo pixel.</para ></listitem> <listitem ><para >Funzione: <function >isDone</function ></para ><para >Restituisci vero se l'iteratore è alla fine (non ci sono più pixel).</para ></listitem> </itemizedlist> </listitem> </itemizedlist> </sect2> <sect2 id="developers-scripting-resources"> <title >Risorse</title> <para >Ecco dei suggerimenti o elenchi parziali di risorse per &krita;. </para ><para >Per <classname >Brush</classname > e <classname >Pattern</classname >: puoi avere il nome del pennello o del motivo associato dal selettore nella barra degli strumenti di &krita;. </para ><para >Un elenco di identificativi per gli spazi dei colori di &krita;: LABA, RGBA, RGBA16, RGBAF32, RGBAF16HALF, LMSAF32, GRAYA, GRAYA16, CMYK, CMYKA16. </para> </sect2> </sect1>