Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Изменить размер картинки / 13 сообщений из 13, страница 1 из 1
06.03.2006, 14:03
    #33584141
J-Pro
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменить размер картинки
Народ, чувствую, я тут ещё позадаю вопросов :)

Имеем: картинку в байтах(брал из базы данных ф-циeй CallableStatement.getBytes()).

Задача: изменить размер картинки, т.е. сделать thumbnail(превью).

Я поискал тут по форуму, нашёл только вопрос о том, что то же самое не получается. Посмотрел доки по API, например, класс Image, но в нём нет подходящих функций. Кто-то делал подобное, можете подсказать?
...
Рейтинг: 0 / 0
06.03.2006, 14:13
    #33584183
Penkov Vladimir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменить размер картинки
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
ImageIcon icon;
 try  {
   icon =  new  ImageIcon( new  URL(filename));
}
 catch  (Exception ex) {
   icon =  new  ImageIcon(filename);
}
 if  (icon.getIconWidth()>maxWidth) {
   icon =  new  ImageIcon(icon.getImage().getScaledInstance(maxWidth, - 1 , Image.SCALE_DEFAULT));
}




-----------------------------------
The Bat + My Gate

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
06.03.2006, 15:44
    #33584514
J-Pro
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменить размер картинки
Deady
Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
ImageIcon icon;
 try  {
   icon =  new  ImageIcon( new  URL(filename));
}
 catch  (Exception ex) {
   icon =  new  ImageIcon(filename);
}
 if  (icon.getIconWidth()>maxWidth) {
   icon =  new  ImageIcon(icon.getImage().getScaledInstance(maxWidth, - 1 , Image.SCALE_DEFAULT));
}




-----------------------------------
The Bat + My Gate

Posted via ActualForum NNTP Server 1.3


Отлично, то, то надо, спасибо! Сделал так:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
   public   byte [] makeThumbnail( byte [] fullImage)
  {
     
     ImageIcon iconFull, iconThumb;
      byte [] thumbImage =  null ;
     
      try  
     {
        iconFull =  new  ImageIcon(fullImage);
     }
      catch  (Exception ex) 
     {
         return  fullImage;
     }
     
     iconThumb =  new  ImageIcon(iconFull.getImage().getScaledInstance(THUMB_WIDTH, - 1 , Image.SCALE_DEFAULT));
     
     // а тут как-то надо выцепить byte[] из iconThumb...

      return  thumbImage;
  }

Но как теперь получить byte[] из ImageIcon?
...
Рейтинг: 0 / 0
06.03.2006, 15:57
    #33584581
Penkov Vladimir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменить размер картинки
J-Pro

> Но как теперь получить byte[] из ImageIcon?




создать ByteArrayOutputStream и сохранить в него изображение с
помощью, например, ImageIO.write(image, "jpg", out);

может быть есть еще способы.

-----------------------------------
The Bat + My Gate

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
06.03.2006, 17:00
    #33584826
J-Pro
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменить размер картинки
Deady создать ByteArrayOutputStream и сохранить в него изображение с
помощью, например, ImageIO.write(image, "jpg", out);

Описание ф-ции: ImageIO.write(RenderedImage im, String formatName, OutputStream output)

Можно как-то из Image или ImageIcon получить RenderedImage? Я смотрел в их ф-циях и в ф-циях RenderedImage - ничего подходящего...

Сорри, что компостирую мозги, но с изображениями никогда дел не имел... Вдруг, для кого-то это как раз плюнуть...
...
Рейтинг: 0 / 0
06.03.2006, 17:18
    #33584881
Penkov Vladimir
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменить размер картинки
полагаю, надо взять getImage() и привечти его к BufferedImage, после
чего передать параметром в ImageIO

-----------------------------------
The Bat + My Gate

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
06.03.2006, 20:19
    #33585317
J-Pro
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменить размер картинки
Deadyполагаю, надо взять getImage() и привечти его к BufferedImage, после
чего передать параметром в ImageIO



java.lang.ClassCastException


Код:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
   public   byte [] makeThumbnail( byte [] fullImage)
  {

     ImageIcon iconFull, iconThumb;
      byte [] thumbImage =  null ;

      try 
     {
        iconFull =  new  ImageIcon(fullImage);
     }
      catch  (Exception ex) 
     {
         return  fullImage;
     }

     iconThumb =  new  ImageIcon(iconFull.getImage().getScaledInstance(THUMB_WIDTH, - 1 , Image.SCALE_DEFAULT));


     ByteArrayOutputStream out =  null ;

      try 
     {
        ImageIO.write((RenderedImage)(iconFull.getImage()), "jpg", out);
        thumbImage = out.toByteArray();
     }
      catch (Exception ex)
     {
        thumbImage =  null ;
     }

      return  thumbImage;

  }


Что посоветуете?
...
Рейтинг: 0 / 0
06.03.2006, 22:19
    #33585471
JAI User
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменить размер картинки
use JAI
...
Рейтинг: 0 / 0
07.03.2006, 13:18
    #33586698
J-Pro
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменить размер картинки
JAI Useruse JAI
Скачал, установил. Как использовать - ума не приложу. Посмотрел доки, примеров по сабжу не нашёл. Я подумал, если Вы его используете, может, подскажете, как Вы это делали? Я имею в виду проблему, описанную выше.
...
Рейтинг: 0 / 0
07.03.2006, 13:53
    #33586841
Denis Popov
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменить размер картинки
Поискать по JAI ?
...
Рейтинг: 0 / 0
07.03.2006, 18:12
    #33587527
J-Pro
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменить размер картинки
Denis PopovПоискать по JAI ?

Спасибо за линк. Нашёл две ф-ции, немного переделал для массива byte[] и заработало. Неужели, я вижу thumbnail?? :)

Привожу переделанный код:

Код: plaintext
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
32.
33.
34.
35.
36.
37.
38.
39.
40.
41.
42.
43.
44.
45.
46.
47.
48.
49.
50.
51.
52.
53.
54.
55.
56.
57.
58.
59.
60.
61.
62.
63.
64.
65.
66.
67.
68.
  // #######################################################################################################
   public   byte [] makeThumbnail( byte [] imgBytes)// throws IOException
  { 
     ImageIcon i =  new  ImageIcon(imgBytes);
      int  width = i.getIconWidth();
      int  height = i.getIconHeight();

      int  sx = THUMB_WIDTH;
      int  sy = sx*height / width; // пропорционально вычислить


     ByteArrayInputStream baIStream =  new  ByteArrayInputStream(imgBytes);

     SeekableStream s = SeekableStream.wrapInputStream(baIStream, true);
     RenderedOp image = JAI.create("stream", s);
     ((OpImage)image.getRendering()).setTileCache( null );
      int  ww = image.getWidth();
      int  hh = image.getHeight();

      if (sx == - 1 )
     {
        sx = ( int )(ww * (( double )sy / hh));
     }

      if (sy == - 1 )
     {
        sy = ( int )(hh * (( double )sx / ww));
     }

     ByteArrayOutputStream baos =  new  ByteArrayOutputStream();
     image = scaleToPix(image, sx, sy);
     JAI.create("encode", image, baos, "PNG",  null );

      return  baos.toByteArray();
  }

  // ################################
   private  RenderedOp scaleToPix(RenderedOp image,  double  width,  double  height)
  {
      if (image ==  null )
         return   null ;

      int  ww = image.getWidth();
      int  hh = image.getHeight();

      float  fattX = ( float )(width / ww);
      float  fattY = ( float )(height / hh);

     Interpolation interp = Interpolation.getInstance(Interpolation.INTERP_BICUBIC_2);
     ParameterBlock parSC =  new  ParameterBlock();
     parSC.addSource(image);
     parSC.add(fattX); // x trans
     parSC.add(fattY); // x trans
     parSC.add( 0 .0f); // x trans
     parSC.add( 0 .0f); // x trans
     parSC.add(interp);

      try 
     {
         return  JAI.create("scale", parSC);
     }
      catch (Exception e)
     {
        e.printStackTrace();
         return   null ;
     }
  }



Всем большое спасибо за помощь!
...
Рейтинг: 0 / 0
07.03.2006, 18:28
    #33587547
е
е
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменить размер картинки
В итоге, "ImageIcon i" вообще не нужно стало?
...
Рейтинг: 0 / 0
07.03.2006, 19:40
    #33587664
J-Pro
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Изменить размер картинки
еВ итоге, "ImageIcon i" вообще не нужно стало?

Да, сорри, это я просто экспериментировал :)
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Изменить размер картинки / 13 сообщений из 13, страница 1 из 1
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]