resizedImage = CreateObject("java", "java.awt.image.BufferedImage"); at = CreateObject("java", "java.awt.geom.AffineTransform"); op = CreateObject("java", "java.awt.image.AffineTransformOp"); w = img.getWidth(); h = img.getHeight(); if (newWidth gt 0 and newHeight eq 0) { scale = newWidth / w; w = newWidth; h = round(h*scale); } else if (newHeight gt 0 and newWidth eq 0) { scale = newHeight / h; h = newHeight; w = round(w*scale); } else if (newHeight gt 0 and newWidth gt 0) { w = newWidth; h = newHeight; } else { retval.errorCode = 1; retVal.errorMessage = "You cannot resize an image to 0x0 pixels."; if (this.throwOnError) { throw("Trapped Error Occurred During Image Manipulation", retVal.errorMessage); } return retVal; } resizedImage.init(javacast("int",w),javacast("int",h),img.getType()); w = w / img.getWidth(); h = h / img.getHeight(); op.init(at.getScaleInstance(w,h), rh); op.filter(img, resizedImage); if (outputFile eq "") { retVal.errorCode = 0; retVal.errorMessage = ""; retVal.img = resizedImage; return retVal; } else { saveImage = writeImage(outputFile, resizedImage, jpegCompression); if (saveImage.errorCode gt 0) { return saveImage; } else { retVal.errorCode = 0; retVal.errorMessage = ""; return retVal; } } if (fromX + newWidth gt img.getWidth() OR fromY + newHeight gt img.getHeight() ) { retVal.errorCode = 1; retVal.errorMessage = "The cropped image dimensions go beyond the original image dimensions."; if (this.throwOnError) { throw("Trapped Error Occurred During Image Manipulation", retVal.errorMessage); } return retVal; } croppedImage = img.getSubimage(javaCast("int", fromX), javaCast("int", fromY), javaCast("int", newWidth), javaCast("int", newHeight) ); if (outputFile eq "") { retVal.errorCode = 0; retVal.errorMessage = ""; retVal.img = croppedImage; return retVal; } else { saveImage = writeImage(outputFile, croppedImage, jpegCompression); if (saveImage.errorCode gt 0) { return saveImage; } else { retVal.errorCode = 0; retVal.errorMessage = ""; return retVal; } } rotatedImage = CreateObject("java", "java.awt.image.BufferedImage"); at = CreateObject("java", "java.awt.geom.AffineTransform"); op = CreateObject("java", "java.awt.image.AffineTransformOp"); iw = img.getWidth(); h = iw; ih = img.getHeight(); w = ih; if(arguments.degrees eq 180) { w = iw; h = ih; } x = (w/2)-(iw/2); y = (h/2)-(ih/2); rotatedImage.init(w,h,img.getType()); at.rotate(arguments.degrees * 0.0174532925,w/2,h/2); at.translate(x,y); op.init(at, rh); op.filter(img, rotatedImage); if (outputFile eq "") { retVal.errorCode = 0; retVal.errorMessage = ""; retVal.img = rotatedImage; return retVal; } else { saveImage = writeImage(outputFile, rotatedImage, jpegCompression); if (saveImage.errorCode gt 0) { return saveImage; } else { retVal.errorCode = 0; retVal.errorMessage = ""; return retVal; } } if (outputFile eq "") { retVal.errorCode = 1; retVal.errorMessage = "The convert method requires a valid output filename."; if (this.throwOnError) { throw("Trapped Error Occurred During Image Manipulation", retVal.errorMessage); } return retVal; } else { saveImage = writeImage(outputFile, img, jpegCompression); if (saveImage.errorCode gt 0) { return saveImage; } else { retVal.errorCode = 0; retVal.errorMessage = ""; return retVal; } } iter = ImageIO.getImageWritersBySuffix(extension); if (iter.hasNext()) { writer = iter.next(); } else { retVal.errorCode = 1; retVal.errorMessage = "Sorry, java doesn't seem to have the ability to write files with a #CHr(34)##extension##Chr(34)#."; if (this.throwOnError) { throw("Trapped Error Occurred During Image Manipulation", retVal.errorMessage); } return retVal; } // Prepare output file ios = ImageIO.createImageOutputStream(outfile); if ( not isDefined("ios") ) { retVal.errorCode = 1; retVal.errorMessage = "Unable to write destination file #outputFile# - permission denied or directory path error."; if (this.throwOnError) { throw("Trapped Error Occurred During Image Manipulation", retVal.errorMessage); } return retVal; } writer.setOutput(ios); // iwparam = createObject("java", "javax.imageio.plugins.jpeg.JPEGImageWriteParam"); // iwparam.init(CreateObject("java","java.util.Locale").init("en_US")); iwparam = writer.getDefaultWriteParam(); if (iwparam.canWriteCompressed()) { // Set the compression quality // note this only works for jpg right now. if (jpegCompression gt 100 or jpegCompression lt 0) { jpegCompression = 1.0; } else if (jpegCompression gt 1) { jpegCompression = jpegCompression / 100; } iwparam.setCompressionMode(iwparam.MODE_EXPLICIT) ; iwparam.setCompressionQuality(jpegCompression); } iioImage = createObject("java", "javax.imageio.IIOImage"); its = createObject("java","javax.imageio.ImageTypeSpecifier"); its.init(img); emptyIIOMetadata = writer.getDefaultImageMetadata(its, iwparam); emptyArrayList = CreateObject("java","java.util.ArrayList"); // workaround for Bluedragon 6.2 // Don't ask me why this is necessary! foo = emptyIIOMetadata.toString(); foo2 = emptyArrayList.toString(); iioImage.init(img, emptyArrayList, emptyIIOMetadata); // Write the image writer.write(emptyIIOMetaData , iioImage, iwparam); // Cleanup ios.flush(); writer.dispose(); ios.close(); flippedImage = CreateObject("java", "java.awt.image.BufferedImage"); at = CreateObject("java", "java.awt.geom.AffineTransform"); op = CreateObject("java", "java.awt.image.AffineTransformOp"); flippedImage.init(img.getWidth(), img.getHeight(), img.getType()); if (direction eq "horizontal") { at = at.getScaleInstance(-1, 1); at.translate(-img.getWidth(), 0); } else { at = at.getScaleInstance(1,-1); at.translate(0, -img.getHeight()); } op.init(at, rh); op.filter(img, flippedImage); if (outputFile eq "") { retVal.errorCode = 0; retVal.errorMessage = ""; retVal.img = flippedImage; return retVal; } else { saveImage = writeImage(outputFile, flippedImage, jpegCompression); if (saveImage.errorCode gt 0) { return saveImage; } else { retVal.errorCode = 0; retVal.errorMessage = ""; return retVal; } } // load objects bgImage = CreateObject("java", "java.awt.image.BufferedImage"); fontImage = CreateObject("java", "java.awt.image.BufferedImage"); overlayImage = CreateObject("java", "java.awt.image.BufferedImage"); Color = CreateObject("java","java.awt.Color"); font = createObject("java","java.awt.Font"); font_stream = createObject("java","java.io.FileInputStream"); ac = CreateObject("Java", "java.awt.AlphaComposite"); // set up basic needs fontColor = Color.init(javacast("int", rgb.red), javacast("int", rgb.green), javacast("int", rgb.blue)); font_stream.init(fontDetails.fontFile); font = font.createFont(font.TRUETYPE_FONT, font_stream); font = font.deriveFont(javacast("float",fontDetails.size)); // get font metrics using a 1x1 bufferedImage fontImage.init(1,1,img.getType()); g2 = fontImage.createGraphics(); g2.setRenderingHints(getRenderingHints()); fc = g2.getFontRenderContext(); bounds = font.getStringBounds(content,fc); g2 = img.createGraphics(); g2.setRenderingHints(getRenderingHints()); g2.setFont(font); g2.setColor(fontColor); // in case you want to change the alpha // g2.setComposite(ac.getInstance(ac.SRC_OVER, 0.50)); // the location (fontDetails.size+y) doesn't really work // the way I want it to. g2.drawString(content,javacast("int",x),javacast("int",fontDetails.size+y)); if (outputFile eq "") { retVal.errorCode = 0; retVal.errorMessage = ""; retVal.img = img; return retVal; } else { saveImage = writeImage(outputFile, img, jpegCompression); if (saveImage.errorCode gt 0) { return saveImage; } else { retVal.errorCode = 0; retVal.errorMessage = ""; return retVal; } } at = CreateObject("java", "java.awt.geom.AffineTransform"); op = CreateObject("java", "java.awt.image.AffineTransformOp"); ac = CreateObject("Java", "java.awt.AlphaComposite"); gfx = originalImage.getGraphics(); gfx.setComposite(ac.getInstance(ac.SRC_OVER, alpha)); at.init(); // op.init(at,op.TYPE_BILINEAR); op.init(at, rh); gfx.drawImage(wmImage, op, arguments.placeAtX, arguments.placeAtY); gfx.dispose(); if (outputFile eq "") { retVal.errorCode = 0; retVal.errorMessage = ""; retVal.img = originalImage; return retVal; } else { saveImage = writeImage(outputFile, originalImage, jpegCompression); if (saveImage.errorCode gt 0) { return saveImage; } else { retVal.errorCode = 0; retVal.errorMessage = ""; return retVal; } }