CONTEST: New ImageJ logo!



Hi @tinevez,

Thanks for the suggestion! I tweaked the size of the dots on i and j (thanks to @tomancak suggestion on Twitter) and added a white outline for more background versatility. Here are 4 versions with or without an added black contour, and using a Fiji-inspired color scheme or a more contrasted one. Not sure how like/votes will be counted across posts and versions but let me know if you like it!

Here how 2b looks in the OSX dock:


Here’s my idea for a new logo. Hopefully you get a sense of ‘community’ from this design!

ImageJ Logo Designs - for ICO - BW-01 ImageJ Logo Designs - for ICO-01

The work was done with Adobe Illustrator so it’s easy to produce vector or bitmap formats as required. Ditto any tweaks or changes.

The colours are not anything in particular—just a couple of tones which I liked and which also maintained good contrast in colour vision deficiency checks.

Below are some variations, mainly to work better at smaller sizes, e.g. as application icons:

64 x 64 pixels:

With drop-shadow With outline

Numix Round style Apple style

16 x 16 pixels:

With drop-shadow With outline Numix Round style Apple style

And as a quick demo in a probable environment the round icon doesn’t look out of place among the others:

Round logo icon demo



This is fun. Here is a more compact version:

I know ImageJ is not just for microscopy, but I value the recognition factor. Here is the SVG including a few different versions if someone wants to play with it. I use Inkscape, not sure it will work elsewhere.

It would be interesting to see something not based on letters.


I like the simple, two colored style of logos. We just need to take care that we are not getting too close to Juventus Turin :wink:


Here are two ideas:

  1. a variation of single ij
    considering the two squares representing binary numbers we have: 01 or 10, so depending which pixel one you count on or off you got 1 or 2 … a bit like ij-legacy and the new stuff :slight_smile:

  2. playing with recursion and symmetry:

    The “i” got pressed a bit into that pattern, so now you need maybe a bit too imagination to quickly recognize it. Not sure how good this works for small sizes, through, there I might need to tweak the proportions.

As you can see, I am not good with colors, so feel free to try to add some.


Old school retro look :slight_smile: I took from the idea of @etarena and @christlet to have an intersection looking like a pixel, which is a nice touch


I’d opt for the following properties of a new icon/logo:

  • flat design (i.e. no gradients, shadows, etc.)
  • scalability (i.e. vector graphics ideally)
  • recognizability (i.e. it should somehow remind of a microscope, as we carry along the history of ImageJ 1.x)
  • scriptability (i.e. it should be possible to generate the logo with a simple script within ImageJ, recursively :slight_smile:)

I really like the suggestion by @frauzufall above, but would prefer a vertical microscope that resembles the original ImageJ icon a bit better.

Here’s a simple suggestion:


In a monochrome setting, this could be rendered e.g. like this:

image image

Colors are of course open for discussion. Also the icon could be centered a bit better than in these quick trials…


Hey all, just wanted to share some of my logo drafting. Easily recognisable icon and the same icon with ImageJ text, for different purposes. Available in all file formats needed.

The icon has a blue nucleus and represents an objective. Hope you like it! :slight_smile:



I played around with the new ImgLib2 ROIs (thanks @awalter17!) and came up with the following script to generate my suggested logo above (note that this currently requires imglib2-roi.jar built from the shape-roi branch; and due to API changes, imagej-ops has to be moved out of the way for it to work in Fiji):

/* Create logo mask */

import net.imglib2.roi.Masks
import net.imglib2.roi.geom.GeomMasks

I = GeomMasks.closedBox([30.5, 10.5] as double[], [40.5, 60.5] as double[])

Jbar      = GeomMasks.closedBox    ([45.5, 30.5] as double[], [70.5, 40.5] as double[])
Jstem     = GeomMasks.closedBox    ([60.5, 30.5] as double[], [70.5, 70.5] as double[])
Jouter    = GeomMasks.OpenSphere   ([50.5, 70.5] as double[], 20.0)
Jinner    = GeomMasks.closedSphere ([50.5, 70.5] as double[], 10.0)
Jclipping = GeomMasks.openBox      ([ 0.5, 70.5] as double[], [100.5, 100.5] as double[])

J = Jouter.minus(Jinner).and(Jclipping).or(Jbar).or(Jstem)

slide  = GeomMasks.closedBox([25.5, 66.5] as double[], [45.5, 68.5] as double[])

These shapes can then be combined with each other (and an optional frame):

/* Create frame */

frame1 = GeomMasks.closedBox([ 0.5,  0.5] as double[], [100.5, 100.5] as double[])
frame2 = GeomMasks.closedBox([ 1.5,  1.5] as double[], [99.5, 99.5] as double[])
frame  = frame1.minus(frame2)

/* Combine mask */

mask = Masks.toRealRandomAccessibleRealInterval(I.or(J).or(slide).or(frame))

… and then rendered in BigDataViewer, or using ImgLib Views

/* Show combined mask in BigDataViewer */

import bdv.util.Bdv
import bdv.util.BdvFunctions
import net.imglib2.FinalInterval
				new FinalInterval(
						[mask.realMin( 0 ), mask.realMin( 1 ) ] as long[],
						[mask.realMax( 0 ), mask.realMax( 1 ) ] as long[] ),
				"2D Mask",
				Bdv.options() )

/* Use Imglib2 Views to raster the mask */

#@OUTPUT img
import net.imglib2.view.Views
import net.imglib2.FinalInterval

img = Views.interval(Views.raster(mask), new FinalInterval(
						[mask.realMin( 0 ), mask.realMin( 1 ) ] as long[],
						[mask.realMax( 0 ), mask.realMax( 1 ) ] as long[] )

… resulting in a binary image, which can then be colorized at will:

image - image - image - image

(Note that I had to add 0.5 to all integer position to work around rastering effects, and then crop the first pixel row and column in order to get the above image. I appreciate any suggestions and improvements on this.)

VOTE NOW for the New ImageJ Logo!



7 posts were split to a new topic: Inability to see images since Dec 30

Inability to see images since Dec 30
Inability to see images since Dec 30

So it seems that I can’t save any edits to any posts right now (the ‘Saving…’ operation never completes).

So for anyone who is having trouble loading images, here is a screenshot of my post. The thumbnail below links through to the full-size version on Imgur.


By the way, who did the current ImageJ2 logo ? Is it based on a real microscope ?


Hi guys,

here’s my suggestion for the new IJ logo.

Maybe as a quick explanation:

  • the dots represent the basic shape of the “Lena” histogram
  • the colored dots represent the initials “I” and “J”



nerdy stuff :smile:
----------- 20 characters…


A post was split to a new topic: VR headsets and ImageJ


See the readme.txt here.


2 posts were merged into an existing topic: Inability to see images since Dec 30


Hi all,

My contribution may be redundent, since I can’t see many of the previous post.

Just using the letter “i” and “j”, separated by a dot to mimic the microscope of the original post.

I made a small script in macro language so you can generate different size and color layout by yourself.

OldSchool (colors closer to the original logo)



// @Integer(label="Image Size",value=256) imageSize
// @String(label="Color Scheme",choices={"rgb","fashion","oldschool"}) colorScheme
// @Boolean(label="Dot as Rectangle on letters") dotAsRectangle

lut_list = getList("LUTs");

newImage("IJ.logo", "8-bit white", imageSize, imageSize, 1);

short_size = imageSize/8;
margin = short_size/2;
long_size = 4*short_size;

total_w = 4*margin+3*short_size;
total_h = 4*margin+2*short_size+long_size;

x_offset = (imageSize-total_w)/2 ;
y_offset = (imageSize-total_h)/2 ;

//set gray level
c_dot = 125;
c_main = 5;

if (colorScheme == "rgb"){
	ci = 200;
	cm = 100;
	cj = 40;
} else if (colorScheme == "fashion") {
	ci = 175;
	cm = 125;
	cj = 55;
} else if (colorScheme == "oldschool") {
	ci = 125;
	cm = 125;
	cj = 125;

//making i
// the "."

if (dotAsRectangle){
	makeColoredRectangle(ci	,margin,	margin	, short_size, short_size);
} else {
	makeColoredOval(ci	,margin,	margin	, short_size, short_size);

// the rest
y_mainI = margin+short_size+margin;
makeColoredRectangle(c_main	,margin, 	y_mainI, short_size, long_size);

//middle "."
x_middleSpot = margin+short_size+margin;
y_middleSpot = y_mainI + long_size/2 ;
if (!dotAsRectangle){
	makeColoredRectangle(cm,x_middleSpot , y_middleSpot ,short_size,short_size);
} else {
	makeColoredOval(cm,x_middleSpot , y_middleSpot ,short_size,short_size);

// making j
// the "." of j
x_j_dot = x_middleSpot + short_size + margin;
y_j_dot = y_mainI;

if (dotAsRectangle){
	makeColoredRectangle(cj, x_j_dot , y_j_dot ,short_size,short_size);
} else {
	makeColoredOval(cj, x_j_dot , y_j_dot ,short_size,short_size);

// the "rest" of j
y_j_horBar = y_mainI + long_size + margin ;
makeColoredRectangle(c_main	, margin, y_j_horBar	,long_size-short_size, short_size);

x_j_vertBar = margin + long_size-short_size;
y_j_vertBar = y_j_dot + short_size + margin;
makeColoredRectangle(c_main	, x_j_vertBar, y_j_vertBar, short_size	,long_size);

run("Select None");

if (colorScheme == "rgb"){
	run("16 colors");
} else if (colorScheme == "fashion") {
	run("16 colors");
} else if (colorScheme == "oldschool") {
	run("Yellow Hot");

function makeColoredRectangle(c,x,y,w,h){
	makeRectangle(x+x_offset, y+y_offset, w, h);
	setForegroundColor(c, c, c);

function makeColoredOval(c,x,y,w,h){
	makeOval(x+x_offset, y+y_offset, w, h);
	setForegroundColor(c, c, c);


Apologies again for all the problems with images over the past few days. All images should now be restored; please speak up if you notice any still missing. (Although: note that the forum will be down soon for several hours; see this post for details.)