rastaQ

A framework for automated digital image creation and processing.

 Welcome to rastaQ

rastaQ is a framework for automated digital image creation and processing. rastaQ processes visual ideas that are given as rastaQ plans. The main objectives of the rastaQ development are: automation, simple and general use, extensibility and portability.

Principle

rastaQ creates graphics by processing image creation plans. A plan defines, what image processing operations are used and what parameter values will be taken.

You can think of a plan as a documented idea. A plan is executable by the rastaQ engine. You can execute a plan with custom parameter values as often as you like to get different results.

Automation

Most graphics are created with interactive gui applications (like gimp, paint, adobe photoshop etc.). This is acceptable for unique or artistic images. If you have to produce sets of similar graphics like price labels, buttons, different sized copies or different colored copies it is worth to define a plan for that kind of graphic. Plan execution is done by rastaQ. You specify the parameters to control the result.

Simple and general use

To create and run a rastaQ plan you simply open a web browser. To embed a graphic in your css or web site you just type the plan execution url.

You can run rastaQ offline by using the maven plugin or the command line client. All resources used by the rastaQ web application can be exported for offline use.

Extensibility

rastaQ can be extended by new operators and datatypes.

Portability

rastaQ software components are all JavaTM based. Plans and resources are usable both on server and on client side.

The rastaQ processing service can be accessed via HTTP.

Image creation is triggered by requesting a url. The http response contains the result image. Execution parameters can be changed by passing url parameters.

As an example plan 87 on the rastaQ demo server produces a button with an image in the upper right corner (flower). By calling the plan URL http://rq-online.deesceha.de/rq/pe/plan/87-1/ you get the default result . The parameter d2 can be passed to override button text. So calling the plan URL http://rq-online.deesceha.de/rq/pe/plan/87-1?d2=press+me gives: .

A list of possible parameters can be retrieved by calling http://rq-online.deesceha.de/rq//gui/info/87-1 here

Please visit the demo site http://rq-online.deesceha.de/rq to get an impression how a rastaQ server works and how plans can be used and customized.

If you want to share your ideas, just use the rastaQ demo site as a registered user to create new plans.

If you want to use your own rastaQ, just run it on your system. The software is available as a prebundled ready to run server. If you only need the web application, you can download the WAR file separately.

License/Disclaimer:

/*
 * rastaQ Server Runtime License 
 * 
 * Copyright (c) 2008-, Daniel Schulz 
 * 
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to use
 * and copy copies of the Software, subject to the following conditions:
 * 
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 * 
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 */
			
          

System requirements:

  • installed JavaTM SE 6 or higher
  • 200 MB hard disk space

Download binaries

Ready to run WAR + Apache Tomcat 6.0.36 »
tomcat 6.0.36, rastaQ 0.2.45
WAR only»
rastaQ 0.2.45

Installing the server: To start the server just unpack the archive, and run the startup.sh|bat script in the bin folder. After server startup you can access the local rastaQ instance at http://localhost:8080/rq .

Updating the WAR: Download the WAR, rename it to rq.war and copy it to the server installation into the webapps folder.

As a developer you can simply add new operators and types by implementing a simple interface.

The sample project rq-sample-op shows how to implement a new operator. It is available at github.com/deesceha/rq-sample-op.

rastaQ API

The rastaQ API defines some interfaces and annotation classes. The API is available at the following maven repository:

<repository>
	<id>rastaq</id>
	<url>http://www.cejotel.de/public/m2</url>
	<releases>
		<enabled>true</enabled>
	</releases>
</repository>
To include the rastaQ API classes just add the following dependency to your POM.
<dependencies>
    ...
	<dependency>
		<artifactId>ipo-api</artifactId>
		<groupId>de.deesceha.ipo</groupId>
		<version>0.2.45</version>
	</dependency>
	...
</dependencies>	

A sample operator: DotMatrixOp

The following java class implemements an operator acting as a dot matrix display. The following figure explains the attributes that can be passed to the operator.

/*
 * The MIT License
 * 
 * Copyright (c) 2008-, Daniel Schulz 
 * 
 * Permission is hereby granted, free of charge, to any person obtaining a copy
 * of this software and associated documentation files (the "Software"), to deal
 * in the Software without restriction, including without limitation the rights
 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
 * copies of the Software, and to permit persons to whom the Software is
 * furnished to do so, subject to the following conditions:
 * 
 * The above copyright notice and this permission notice shall be included in
 * all copies or substantial portions of the Software.
 * 
 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
 * THE SOFTWARE.
 */
package de.deesceha.rq.samples;

import java.awt.Color;
import java.awt.Graphics2D;
import java.awt.image.BufferedImage;
import java.util.List;

import de.deesceha.ipo.core.IpoOperator;
import de.deesceha.ipo.core.IpoSource;
import de.deesceha.ipo.core.annotation.IpoBean;
import de.deesceha.ipo.core.annotation.IpoOp;
import de.deesceha.ipo.core.annotation.IpoParam;
import de.deesceha.ipo.processing.PlanExecutionContext;

/**
 * @author ds
 * 
 *         dot matrix display parameters
 * 
 *         dot dw - width dh - height dmx - x margin dmy - y margin col_a -
 *         color of activated dot col_b - color of margin area col_d - color of
 *         deactivated dot
 * 
 *         dot matrix cols - number of columns rows - number of rows
 * 
 *         display
 * 
 *         content - string specifying active and inactive dots with X and -.
 *         One sequence starting at (1,1) row wise to (#cols, #rows).
 */
@IpoOp(maxSrc = 0, minSrc = 0, srcParams = {})
@IpoBean(author = "nobody", customizable = true, description = "DotMatrixDisplay", name = "DotMatrixOp", releaseDate = "2013-11-27", version = "1")
public class DotMatrixOp implements IpoOperator {

	/*
	 * dw - width dh - height dmx - x margin dmy - y margin col_a - color of
	 * activated dot col_b - color of margin area col_d - color of deactivated
	 * dot
	 */
	private int dw, dh, dmx, dmy, rows, cols;
	private Color cola, colb, cold;
	private String content;

	public BufferedImage process() {

		// image width : cols * (dw + 2*dmx)
		// image height: rows * (dh + 2*dmy)

		BufferedImage bi = new BufferedImage(cols * (dw + 2 * dmx), rows
				* (dh + 2 * dmy), BufferedImage.TYPE_INT_ARGB);

		Graphics2D g2d = (Graphics2D) bi.getGraphics();

		// fill whole image with background color
		g2d.setPaint(getColb());
		g2d.fillRect(0, 0, bi.getWidth(), bi.getHeight());

		char dot = 'x';

		for (int y = 0; y < rows; y++) {
			for (int x = 0; x < cols; x++) {

				int contentIdx = y * cols + x;

				if (content.length() > contentIdx) {

					int rectX = x * (dw + 2 * dmx) + dmx;
					int rectY = y * (dh + 2 * dmy) + dmy;

					if (content.charAt(contentIdx) == dot) {
						g2d.setPaint(getCola());
						// g2d.fillRect(rectX, rectY, dw, dh);
					} else {
						g2d.setPaint(getCold());
					}

					g2d.fillRect(rectX, rectY, dw, dh);
				}

			}
		}

		return bi;
	}

	public void setCtx(PlanExecutionContext ctx) {
		// TODO Auto-generated method stub

	}

	public void setSources(List sources) {
		// TODO Auto-generated method stub

	}

	public int getDw() {
		return dw;
	}

	public int getDh() {
		return dh;
	}

	public int getDmx() {
		return dmx;
	}

	public int getDmy() {
		return dmy;
	}

	public int getRows() {
		return rows;
	}

	public int getCols() {
		return cols;
	}

	public Color getCola() {
		return cola;
	}

	public Color getColb() {
		return colb;
	}

	public Color getCold() {
		return cold;
	}

	public String getContent() {
		return content;
	}

	@IpoParam(position = 10, defaultValue = "20")
	public void setDw(int dw) {
		this.dw = dw;
	}

	@IpoParam(position = 20, defaultValue = "20")
	public void setDh(int dh) {
		this.dh = dh;
	}

	@IpoParam(position = 30, defaultValue = "2")
	public void setDmx(int dmx) {
		this.dmx = dmx;
	}

	@IpoParam(position = 40, defaultValue = "2")
	public void setDmy(int dmy) {
		this.dmy = dmy;
	}

	@IpoParam(position = 50, defaultValue = "5")
	public void setRows(int rows) {
		this.rows = rows;
	}

	@IpoParam(position = 60, defaultValue = "4")
	public void setCols(int cols) {
		this.cols = cols;
	}

	@IpoParam(position = 70, defaultValue = "black")
	public void setCola(Color cola) {
		this.cola = cola;
	}

	@IpoParam(position = 80, defaultValue = "yellow")
	public void setColb(Color colb) {
		this.colb = colb;
	}

	@IpoParam(position = 90, defaultValue = "#00ffff22")
	public void setCold(Color cold) {
		this.cold = cold;
	}

	@IpoParam(position = 100, defaultValue = "xxxx" + "x---" + "xxx-" + "x---"
			+ "xxxx")
	public void setContent(String content) {
		this.content = content;
	}
}


						
						
						
						

The operator was deployed to the demo system at rq-online.deesceha.de. Plan 550 contains the dotmatrix operator. It is available at http://rq-online.deesceha.de/rq/pe/plan/550-2 (paremeter info here).

The dots can be changed with the parameter p10 . An E is represented in the 4x5 dot matrix by xxxxx---xxx-x---xxxx and by passing it in the call URL http://rq-online.deesceha.de/rq/pe/plan/550-2/p10/xxxxx---xxx-x---xxxx the resulting image is

The following sequence of image tags demonstrates the effect of setting various parameters.

<img src="http://rq-online.deesceha.de/rq/pe/plan/550-2/p10/--------xx--x---x---"/>
<img src="http://rq-online.deesceha.de/rq/pe/plan/550-2/p10/---------xx-x-x-xxx-"/>
<img src="http://rq-online.deesceha.de/rq/pe/plan/550-2/p10/---------xx--x--xx--"/>
<img src="http://rq-online.deesceha.de/rq/pe/plan/550-2/p10/----x---xx--x---xx--"/>
<img src="http://rq-online.deesceha.de/rq/pe/plan/550-2/p10/---------xx-x-x-xxx-"/>
<img src="http://rq-online.deesceha.de/rq/pe/plan/550-2/p7/red/p6/6/p5/8/p4/1/p3/1/p2/13/p1/13/p10/--------xx---x--x--x--x--x--x---xx------x-------/p9/%23eeeeee"/>						
						
results in:

Addon package descriptor

An addon package for rastaq is a java archive containing all bean and operator classes and an addon descriptor named aipio.pkg.xml

The addon descriptor contains meta informations about the package and the class names of implemented operators and beans.

<PackageSpec>
	<mnemonic>sample01</mnemonic>
	<name>sample01</name>
	<description>rq sample 1</description>
	<version>${pom.version}</version>
	<OpEntries>
		<OpEntry>
			<clazz>de.deesceha.rq.samples.DotMatrixOp
			</clazz>
		</OpEntry>
	</OpEntries>
</PackageSpec>									

Please direct all requests to: rastaq (at) deesceha (dot) de

Impressum

Angaben gemäß § 5 TMG

Daniel Schulz
Lindenring 24
15528 Spreenhagen

Vertreten durch:
Daniel Schulz

Kontakt:
Telefon: 033633-619096
E-Mail: daniel (at) cejotel (dot) de

Haftungsausschluss:

Haftung für Inhalte

Die Inhalte unserer Seiten wurden mit größter Sorgfalt erstellt. Für die Richtigkeit, Vollständigkeit und Aktualität der Inhalte können wir jedoch keine Gewähr übernehmen. Als Diensteanbieter sind wir gemäß § 7 Abs.1 TMG für eigene Inhalte auf diesen Seiten nach den allgemeinen Gesetzen verantwortlich. Nach §§ 8 bis 10 TMG sind wir als Diensteanbieter jedoch nicht verpflichtet, übermittelte oder gespeicherte fremde Informationen zu überwachen oder nach Umständen zu forschen, die auf eine rechtswidrige Tätigkeit hinweisen. Verpflichtungen zur Entfernung oder Sperrung der Nutzung von Informationen nach den allgemeinen Gesetzen bleiben hiervon unberührt. Eine diesbezügliche Haftung ist jedoch erst ab dem Zeitpunkt der Kenntnis einer konkreten Rechtsverletzung möglich. Bei Bekanntwerden von entsprechenden Rechtsverletzungen werden wir diese Inhalte umgehend entfernen.

Haftung für Links

Unser Angebot enthält Links zu externen Webseiten Dritter, auf deren Inhalte wir keinen Einfluss haben. Deshalb können wir für diese fremden Inhalte auch keine Gewähr übernehmen. Für die Inhalte der verlinkten Seiten ist stets der jeweilige Anbieter oder Betreiber der Seiten verantwortlich. Die verlinkten Seiten wurden zum Zeitpunkt der Verlinkung auf mögliche Rechtsverstöße überprüft. Rechtswidrige Inhalte waren zum Zeitpunkt der Verlinkung nicht erkennbar. Eine permanente inhaltliche Kontrolle der verlinkten Seiten ist jedoch ohne konkrete Anhaltspunkte einer Rechtsverletzung nicht zumutbar. Bei Bekanntwerden von Rechtsverletzungen werden wir derartige Links umgehend entfernen.

Urheberrecht

Die durch die Seitenbetreiber erstellten Inhalte und Werke auf diesen Seiten unterliegen dem deutschen Urheberrecht. Die Vervielfältigung, Bearbeitung, Verbreitung und jede Art der Verwertung außerhalb der Grenzen des Urheberrechtes bedürfen der schriftlichen Zustimmung des jeweiligen Autors bzw. Erstellers. Downloads und Kopien dieser Seite sind nur für den privaten, nicht kommerziellen Gebrauch gestattet. Soweit die Inhalte auf dieser Seite nicht vom Betreiber erstellt wurden, werden die Urheberrechte Dritter beachtet. Insbesondere werden Inhalte Dritter als solche gekennzeichnet. Sollten Sie trotzdem auf eine Urheberrechtsverletzung aufmerksam werden, bitten wir um einen entsprechenden Hinweis. Bei Bekanntwerden von Rechtsverletzungen werden wir derartige Inhalte umgehend entfernen.

Datenschutz

Die Nutzung unserer Webseite ist in der Regel ohne Angabe personenbezogener Daten möglich. Soweit auf unseren Seiten personenbezogene Daten (beispielsweise Name, Anschrift oder eMail-Adressen) erhoben werden, erfolgt dies, soweit möglich, stets auf freiwilliger Basis. Diese Daten werden ohne Ihre ausdrückliche Zustimmung nicht an Dritte weitergegeben.
Wir weisen darauf hin, dass die Datenübertragung im Internet (z.B. bei der Kommunikation per E-Mail) Sicherheitslücken aufweisen kann. Ein lückenloser Schutz der Daten vor dem Zugriff durch Dritte ist nicht möglich.
Der Nutzung von im Rahmen der Impressumspflicht veröffentlichten Kontaktdaten durch Dritte zur Übersendung von nicht ausdrücklich angeforderter Werbung und Informationsmaterialien wird hiermit ausdrücklich widersprochen. Die Betreiber der Seiten behalten sich ausdrücklich rechtliche Schritte im Falle der unverlangten Zusendung von Werbeinformationen, etwa durch Spam-Mails, vor.


Quelle: Impressum Generator