So let me put some code here to show my approach (it is only first version and it means that there are still many issues).
I used LS2J approach.
So here is my Java Library (core):
Options:
Option Public
Option Declare
Use "ImageLib"
Initialize:
import java.awt.AlphaComposite;
import java.awt.Graphics2D;
import java.awt.RenderingHints;
import java.awt.image.BufferedImage;
import java.io.File;
import java.io.IOException;
import javax.imageio.ImageIO;
public class JpgImage {
BufferedImage originalImage = null;
String fileName = "";
int type = 0;
public JpgImage (String m_fileName) throws IOException {
try{
fileName = m_fileName;
originalImage = ImageIO.read(new File(fileName));
type = originalImage.getType() == 0? BufferedImage.TYPE_INT_ARGB : originalImage.getType();
}catch(IOException e){
System.out.println(e.getMessage());
}
}
public int ImgResize (int w, int h)
{
String newFileName = "";
String imgFormat = "";
try{
newFileName = fileName.replace(".", "-thumb.");
if(type == 5) {
imgFormat = "jpg";
}
else {
imgFormat = "png";
}
BufferedImage resizeImage = resizeImage(originalImage, type, w, h);
ImageIO.write(resizeImage, imgFormat, new File(newFileName));
}catch(IOException e){
System.out.println(e.getMessage());
}
return 0;
}
public int getWidth (){
return originalImage.getWidth();
}
public int getHeight () {
return originalImage.getHeight();
}
private static BufferedImage resizeImage(BufferedImage originalImage, int type, int w, int h){
BufferedImage resizedImage = new BufferedImage(w, h, type);
Graphics2D g = resizedImage.createGraphics();
g.drawImage(originalImage, 0, 0, w, h, null);
g.dispose();
return resizedImage;
}
}
LS code.
Options
Option Public
Option Declare
Use "ImageTest "
Uselsx "*javacon"
function add/change image (it creates Thumbnail version of original image with max size 120x120)
%REM
add image to Body and BodyThumbnail fields
%END REM
On Error Goto processError
Dim jpgClass As JavaClass
Dim jpgImage As JavaObject
Dim jpgImageThumbnail As JavaObject
Dim jError As JavaError
Dim w As New NotesUIWorkspace
Dim uidoc As NotesUIDocument
Dim uidocnew As NotesUIDocument
Dim doc As NotesDocument
Dim body As NotesRichTextItem
Dim bodyThumbnail As NotesRichTextItem
Dim filepath As Variant
Dim vFileNameThumbnail As Variant
Dim tmp As String
Dim filename As String
Dim filenameThumbnail As String
Dim picH As Integer, picW As Integer
Dim picHT As Integer, picWT As Integer
Dim debug As Boolean
debug = True
If debug Then Print Lsi_info(2) & " starts at: " & Now
Set uidoc = w.CurrentDocument
Set doc = uidoc.Document
filepath = w.OpenFileDialog(False, "Please select iamge", "JPG|*.jpg|GIF|*.gif|PNG|*.png|", "", "")
If Not Isarray(filepath) Then Exit Sub
filename = filepath(0)
'** everything we'll need to access our Java classes
Dim jSession As New JavaSession
'** get the JpgImage class and instantiate an instance of it
Set jpgClass = jSession.GetClass("JpgImage")
Set jpgImage = jpgClass.CreateObject("(Ljava/lang/String;)V", fileName)
'get width and height of images
picH = jpgImage.getHeight()
picW = jpgImage.getWidth()
Call doc.ReplaceItemValue("picH", picH)
Call doc.ReplaceItemValue("picW", picW)
'attach image to as it is to body field
Call doc.RemoveItem("Body")
Set body = New NotesRichTextItem(doc, "Body")
Call body.EmbedObject (EMBED_ATTACHMENT, "", filename)
' new image
If picH > 120 Then
picHT = 120
Else
picHT = picH
End If
If picW > 120 Then
picWT = 120
Else
picWT = picW
End If
Call jpgImage.imgResize(picWT, picHT) '** shrink to 50% of the original size
If Instr(filename, ".gif") Then
Dim original_name As String
original_name = Replace(filename, ".", "-thumb.")
fileNameThumbnail = Replace(filename, ".gif", "-thumb.png")
Name original_name As fileNameThumbnail
Else
fileNameThumbnail = Replace(filename, ".", "-thumb.")
End If
Call doc.ReplaceItemValue("picHT", picHT)
Call doc.ReplaceItemValue("picWT", picWT)
'attach thumbnail version of image
Call doc.RemoveItem("bodyThumbnail")
Set body = New NotesRichTextItem(doc, "bodyThumbnail")
Call body.EmbedObject (EMBED_ATTACHMENT, "", fileNameThumbnail)
Kill fileNameThumbnail
doc.SaveOptions = "0"
Call uidoc.Close(True)
Set uidocNew = w.EditDocument(True, doc, , , , True)
Delete uidoc
Call uidocNew.Document.RemoveItem("SaveOptions")
Call uidocnew.Refresh
basta:
If debug Then Print Lsi_info(2) & " starts at: " & Now
Exit Sub
processError:
'** report any errors we get and keep on going
Set jError = jSession.getLastJavaError()
If (jError.errorMsg = "") Then
Print "Notes Error at line " & Erl & ": " & Error$
Else
Print "Error at line " & Erl & ": " & jError.errorMsg
jSession.ClearJavaError
End If
Msgbox Error$
Resume basta
End Sub
btw, then I found more interesting solution (at least I think so :-D) on nsftools.com
1 comment :
Cool stuff, any idea how hard it is to modify this to add BMP support? with the output being JPEG
Post a Comment