Научите пожалуйста определять размер картинки

Gandliar

Lotus Team
16.02.2004
564
26
BIT
110
Привет!

К документу пристегнут файл с картинкой, обычно *.jpeg или *.gif

Необходимо определить его width и height :)

Помогите плиз.
 
T

turumbay

К документу пристегнут файл с картинкой, обычно *.jpeg или *.gif
Необходимо определить его width и height :)
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable">как-то так</div></div><div class="sp-body"><div class="sp-content">
Код:
Option Declare
Uselsx "*javacon"

Class Dimension
Private t_width As Integer
Private t_height As Integer
Sub new( i_width As Integer , i_height As Integer)
t_width = i_width
t_height = i_height
End Sub
Public Function getWidth() As Integer
getWidth = t_width
End Function
Public Function getHeight() As Integer
getHeight = t_height
End Function
End Class

Function getImageDimension( filepath As String ) As Dimension
Dim jSession As New JavaSession() 
Dim toolkit As JAVACLASS
Set toolkit = jSession.GetClass("java/awt/Toolkit")
Dim image As JavaObject
Set image = toolkit.getDefaultToolkit().getImage( filepath )
Set getImageDimension = New Dimension( image.getWidth() , image.getHeight() )	
End Function
Выгрузить аттач на диск во временную папку предлагаю самостоятельно. Рекомендую:
Код:
Function getTmpFolder() As String
Dim jSession As New JavaSession()
Dim System As JAVACLASS
Set System = jSession.GetClass("java/lang/System")
Dim method As JAVAMETHOD
Set method = System.GetMethod("getProperty" , "(Ljava/lang/String;)Ljava/lang/String;" )
getTmpFolder = method.Invoke( , "java.io.tmpdir") 
End Function
 

Gandliar

Lotus Team
16.02.2004
564
26
BIT
110
Спасибо большое, а то уже влез в побайтное чтение файлов картинок :) моя версия заработала, но не элегантно :)

А с ява-классами просто получается совсем.

Если нетрудно, подскажите пожалуйста где почитать, про остальные возможности.
Насколько я понимаю, нужный класс нашелся на машине, так как была установлена ранее java или это стандартный класс винды?
будет ли такой скрипт работать на сервере и как тут обстоят дела с производительностью, есть ли подводные камни?
 
T

turumbay

Спасибо большое, а то уже влез в побайтное чтение файлов картинок :) моя версия заработала, но не элегантно :)
Побайтное - это круто. :)
А с ява-классами просто получается совсем.
Угу. После LS, жизнь с явой жизнь покажется раем :)
Если нетрудно, подскажите пожалуйста где почитать, про остальные возможности.
Насколько я понимаю, нужный класс нашелся на машине, так как была установлена ранее java или это стандартный класс винды?[/qoute]
будет ли такой скрипт работать на сервере и как тут обстоят дела с производительностью, есть ли подводные камни?
Почитать про остальные возможности можно в книжках. Тут как-то обсуждали недавно. Ну и гугл прям-таки завален информацией.
Пакет java.awt идет в "стандартной" комплектации jre, в т.ч. в реализации jvm от ibm, которая включена в состав lotus domino/notes.
Т.о. код будет работать везде, где есть domino или notes. В т.ч. на сервере, причем под любой поддерживаемой OS.
Подводные камни примерно следующие:
- с хорошей вероятностью нужно дать агенту прав писать на диск, что обычно не очень здорово. подозреваю, что при большом желании это можно обойти, вываливая документ в inmemory dxl, и раскодируя base64 аттача.
- под linux без установленных иксов, возможно придется подкрутить настройку серверной jvm. что-то типа java.awt.headless = true. Если вдруг вылезет - можно почитать
- если для получения контента файла используеца EmbeddedObject.getInputStream(), то необходимо помнить про
EmbeddedObject.getInputStream creates a temporary file. The file is deleted when EmbeddedObject is recycled.
Т.е. желательно вызвать recycle() у аттача.
- если файлы большие - возможно придеца поднять JavaMaxHeapSize в notes.ini
С производительностью все нормально - ls2j поднимается быстрее, чем обычный java агент, т.к. ему не надо инициализировать доминошную сессию.
Если domino версии 8.5 - то еще шустрее( ибо jvm 1.6 )
 

lmike

нет, пердело совершенство
Lotus Team
27.08.2008
7 985
611
BIT
470
добавлю, что с жпегами есть и понятие DPI, кот. будет влиять на размер имеджа, при отображении...
как этот факт не учитывается awt - я не помню (по-моему никак)
есть и другие методы получения сайза (здесь обсуждалось), а ёще я писал
и воще, в есть агент, кот. сайзы указывает (наскока помню - я делал с выводом DPI)
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!