1. Набираем команду codeby webinar. Набираем команду для организации и проведения вебинаров. Подробнее ...

    Скрыть объявление
  2. Требуются разработчики и тестеры для проекта codebyOS. Требования для участия в проекте: Знание принципов работы ОС на базе Linux; Знание Bash; Крайне желательное знание CPP, Python, Lua; Навыки системного администрирования. Подробнее ...

    Скрыть объявление
  3. Получи 30.000 рублей. Для получения денег необходимо принять участие в конкурсе авторов codeby. С условиями и призами можно ознакомиться на этой странице ...

    Внимание! Регистрация авторов на конкурс закрыта.

    Скрыть объявление

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

Тема в разделе "Lotus - Программирование", создана пользователем Gandliar, 16 фев 2011.

  1. Gandliar

    Gandliar Well-Known Member
    Lotus team

    Репутация:
    0
    Регистрация:
    16 фев 2004
    Сообщения:
    321
    Симпатии:
    4
    Привет!

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

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

    Помогите плиз.
     
  2. turumbay

    Репутация:
    0
    Регистрация:
    13 мар 2009
    Сообщения:
    625
    Симпатии:
    2
    <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
     
  3. Gandliar

    Gandliar Well-Known Member
    Lotus team

    Репутация:
    0
    Регистрация:
    16 фев 2004
    Сообщения:
    321
    Симпатии:
    4
    Спасибо большое, а то уже влез в побайтное чтение файлов картинок :) моя версия заработала, но не элегантно :)

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

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

    Репутация:
    0
    Регистрация:
    13 мар 2009
    Сообщения:
    625
    Симпатии:
    2
    Побайтное - это круто. :)
    Угу. После LS, жизнь с явой жизнь покажется раем :)
    Почитать про остальные возможности можно в книжках. Тут как-то обсуждали недавно. Ну и гугл прям-таки завален информацией.
    Пакет java.awt идет в "стандартной" комплектации jre, в т.ч. в реализации jvm от ibm, которая включена в состав lotus domino/notes.
    Т.о. код будет работать везде, где есть domino или notes. В т.ч. на сервере, причем под любой поддерживаемой OS.
    Подводные камни примерно следующие:
    - с хорошей вероятностью нужно дать агенту прав писать на диск, что обычно не очень здорово. подозреваю, что при большом желании это можно обойти, вываливая документ в inmemory dxl, и раскодируя base64 аттача.
    - под linux без установленных иксов, возможно придется подкрутить настройку серверной jvm. что-то типа java.awt.headless = true. Если вдруг вылезет - можно почитать тут
    - если для получения контента файла используеца EmbeddedObject.getInputStream(), то необходимо помнить про
    Т.е. желательно вызвать recycle() у аттача.
    - если файлы большие - возможно придеца поднять JavaMaxHeapSize в notes.ini
    С производительностью все нормально - ls2j поднимается быстрее, чем обычный java агент, т.к. ему не надо инициализировать доминошную сессию.
    Если domino версии 8.5 - то еще шустрее( ибо jvm 1.6 )
     
  5. lmike

    lmike нет, пердело совершенство
    Lotus team

    Репутация:
    1
    Регистрация:
    27 авг 2008
    Сообщения:
    6.375
    Симпатии:
    336
    добавлю, что с жпегами есть и понятие DPI, кот. будет влиять на размер имеджа, при отображении...
    как этот факт не учитывается awt - я не помню (по-моему никак)
    есть и другие методы получения сайза (здесь обсуждалось), а ёще я писал здесь
    и воще, в этом проекте есть агент, кот. сайзы указывает (наскока помню - я делал с выводом DPI)
     
Загрузка...

Поделиться этой страницей