Skip to content

Instantly share code, notes, and snippets.

@mtrebitsch
Created February 12, 2020 16:21
Show Gist options
  • Save mtrebitsch/92e1e1a52cbc836c131cd8553a8ac3f2 to your computer and use it in GitHub Desktop.
Save mtrebitsch/92e1e1a52cbc836c131cd8553a8ac3f2 to your computer and use it in GitHub Desktop.
Not very clean script to merge images with ImageMagick
# Define the maps I will use
TEMPERATURE="BASE/Obelisk_00194_Projection_y_temperature_density.png"
GAMMA="BASE/Obelisk_00194_Projection_y_Gamma_HI_density.png"
DENSITY="BASE/Obelisk_00194_Projection_y_H_nuclei_density.png"
DM="BASE/Obelisk_00194_Projection_y_DM_density.png"
STARS="BASE/Obelisk_00194_Projection_y_star_density.png"
SIZE=$(convert $TEMPERATURE -ping -format "%w" info:)
HALF=$(echo "scale=0;$SIZE / 2" | bc -l)
ONETHIRD=$(echo "scale=0; $SIZE / 3" | bc -l)
ONEFOURTH=$(echo "scale=0; $SIZE / 4" | bc -l)
THREEFOURTH=$(echo "scale=0; 3 * $SIZE / 4" | bc -l)
TWOTHIRD=$(echo "scale=0; 2 *$SIZE / 3" | bc -l)
BLUR=$(echo "scale=0;$SIZE / 20" | bc -l)
RADIUS=$(echo "scale=0;$SIZE / 8" | bc -l)
SMALLRADIUS=$(echo "scale=0;$SIZE / 16" | bc -l)
FONTSIZE=$(echo "scale=0;18 * $SIZE / 1000" | bc -l)
OFFSET=$(echo "scale=0;5 * $SIZE / 1000" | bc -l)
echo "SIZE: $SIZE"
echo "RADIUS: $RADIUS"
# Half masks
if [ ! -f "maskv.png" ]
then
convert -size ${SIZE}x${SIZE} xc: -draw "rectangle 0,0 ${HALF},${SIZE}" -blur 0x${BLUR} maskv.png
fi
echo "First mask: OK"
if [ ! -f "maskh.png" ]
then
convert -size ${SIZE}x${SIZE} xc: -draw "rectangle 0,0 ${SIZE},${HALF}" -blur 0x${BLUR} maskh.png
fi
echo "Second mask: OK"
# Circular mask
if [ ! -f "maskc.png" ]
then
convert -size ${SIZE}x${SIZE} xc: -draw "translate ${HALF},${HALF} circle 0,0 ${RADIUS},0" -blur 0x${BLUR} maskc.png
fi
echo "Circle mask: OK"
if [ ! -f "maskcsharp.png" ]
then
convert -size ${SIZE}x${SIZE} xc: -draw "translate ${HALF},${HALF} circle 0,0 ${SMALLRADIUS},0" maskcsharp.png
fi
echo "Circle mask: OK"
# Vertical thirds
if [ ! -f "maskv1third.png" ]
then
convert -size ${SIZE}x${SIZE} xc: -draw "rectangle 0,0 ${ONETHIRD},${SIZE}" -blur 0x${BLUR} maskv1third.png
fi
echo "1/3 vertical mask: OK"
if [ ! -f "maskv2third.png" ]
then
convert -size ${SIZE}x${SIZE} xc: -draw "rectangle 0,0 ${TWOTHIRD},${SIZE}" -blur 0x${BLUR} maskv2third.png
fi
echo "2/3 vertical mask: OK"
# Vertical fourth
if [ ! -f "maskv1fourth.png" ]
then
convert -size ${SIZE}x${SIZE} xc: -draw "rectangle 0,0 ${ONEFOURTH},${SIZE}" -blur 0x${BLUR} maskv1fourth.png
fi
echo "1/4 vertical mask: OK"
if [ ! -f "maskv3fourth.png" ]
then
convert -size ${SIZE}x${SIZE} xc: -draw "rectangle 0,0 ${THREEFOURTH},${SIZE}" -blur 0x${BLUR} maskv3fourth.png
fi
echo "3/4 vertical mask: OK"
# Horizontal thirds
if [ ! -f "maskh1third.png" ]
then
convert -size ${SIZE}x${SIZE} xc: -draw "rectangle 0,0 ${SIZE},${ONETHIRD}" -blur 0x${BLUR} maskh1third.png
fi
echo "1/3 horizontal mask: OK"
if [ ! -f "maskh2third.png" ]
then
convert -size ${SIZE}x${SIZE} xc: -draw "rectangle 0,0 ${SIZE},${TWOTHIRD}" -blur 0x${BLUR} maskh2third.png
fi
echo "2/3 horizontal mask: OK"
# Diagonal masks
if [ ! -f "maskupleft.png" ]
then
convert -size ${SIZE}x${SIZE} xc: -draw "polygon 0,0 ${SIZE},0 0,${SIZE}" -blur 0x${BLUR} maskupleft.png
fi
echo "Upper left mask: OK"
if [ ! -f "maskupright.png" ]
then
convert -size ${SIZE}x${SIZE} xc: -draw "polygon 0,0 ${SIZE},${SIZE} ${SIZE},0" -blur 0x${BLUR} maskupright.png
fi
echo "Upper right mask: OK"
# Rotating masks
if [ ! -f "clockwise.gif" ]
then
convert -size ${SIZE}x${SIZE} xc: -draw "polygon 0,0 ${SIZE},${SIZE} ${SIZE},0" -blur 0x${BLUR} -duplicate 179 -distort SRT 1,%[fx:t*2] clockwise.gif
mkdir -p clockwise_mask
convert clockwise.gif clockwise_mask/clockwise_mask_%05d.png
fi
echo "First rotating mask: OK"
if [ ! -f "clockwise_advance.gif" ]
then
convert -size ${SIZE}x${SIZE} xc: -draw "polygon 0,0 ${SIZE},${SIZE} ${SIZE},0" -blur 0x${BLUR} -duplicate 179 -distort SRT 1,%[fx:t*2] clockwise_advance.gif
mkdir -p clockwise_advance_mask
convert clockwise_advance.gif clockwise_advance_mask/clockwise_advance_mask_%05d.png
fi
echo "Second rotating mask: OK"
###############################################################################
# First figure: 4 panels (+ centre)
# ---------------------------------
# Horizontal tiling
convert $TEMPERATURE $GAMMA maskv.png -composite obetest1.png
convert $DENSITY $DM maskv.png -composite obetest2.png
echo "Horizontal tiling done"
# Vertical tiling
convert obetest1.png obetest2.png maskh.png -composite Obelisk_4var_tmp.png
echo "Vertical tiling done"
# Second figure: 5 panels (centre)
# --------------------------------
# Circle
convert $STARS obetest.png maskc.png -composite Obelisk_5var_tmp.png
echo "Circular inset done"
###############################################################################
# Third figure: 3 panels
# ----------------------
convert $DENSITY $TEMPERATURE maskv1third.png -composite obetest3.png
convert obetest3.png $DM maskv2third.png -composite Obelisk_3var_tmp.png
convert $DENSITY $DM maskh.png -composite obetest3.png
convert $STARS obetest3.png maskc.png -composite Obelisk_3varbis_tmp.png
echo "Three panels done"
###############################################################################
# Fifth figure: diagonals and cross
# ---------------------------------
convert $DENSITY $DM maskupleft.png -composite Obelisk_upleft_diagonal.png
convert $GAMMA $TEMPERATURE maskupleft.png -composite Obelisk_upright_diagonal.png
convert Obelisk_upright_diagonal.png Obelisk_upleft_diagonal.png maskupright.png -composite Obelisk_cross_tmp.png
convert $STARS Obelisk_cross_tmp.png maskc.png -composite Obelisk_crosscircle_tmp.png
echo "Circular inset done (again)"
echo "Cross done"
###############################################################################
# First figure: 4 panels (+ centre)
# ---------------------------------
# Horizontal tiling
convert $DENSITY $TEMPERATURE maskv1fourth.png -composite obetest1.png
convert $GAMMA $DM maskv3fourth.png -composite obetest2.png
convert obetest1.png obetest2.png maskv.png -composite Obelisk_allvert.png
echo "Multipanel tiling done"
convert $STARS Obelisk_allvert.png maskcsharp.png -stroke white -fill none -strokewidth $OFFSET -draw "translate ${HALF},${HALF} circle 0,0 ${SMALLRADIUS},0" -composite Obelisk_allvert_circle.png
echo "Circular inset done (again)"
convert $STARS Obelisk_cross_tmp.png maskc.png -composite Obelisk_crosscircle_tmp.png
echo "Circular inset done (again)"
###############################################################################
# Post-processing
# ---------------
# Create small versions
convert -resize 25% Obelisk_5var.png Obelisk_5var_small.png
convert -resize 25% Obelisk_4var.png Obelisk_4var_small.png
convert -resize 25% Obelisk_3var.png Obelisk_3var_small.png
convert -resize 25% Obelisk_3varbis.png Obelisk_3varbis_small.png
convert -resize 25% Obelisk_cross.png Obelisk_cross_small.png
convert -resize 25% Obelisk_crosscircle.png Obelisk_crosscircle_small.png
# Crop for banner
convert Obelisk_allvert_circle.png -gravity Center -crop ${SIZE}x${HALF}+0+0 Obelisk_allvert_circle_crop.png
convert Obelisk_allvert.png -gravity Center -crop ${SIZE}x${HALF}+0+0 Obelisk_allvert_crop.png
convert -resize 25% Obelisk_allvert_crop.png Obelisk_allvert_crop_small.png
# Clean a bit
# mv Obelisk_cross_tmp.png Obelisk_cross_clean.png
rm obetest?.png
rm Obelisk_*_tmp.png
echo "All done"
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment