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

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

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

Я поискал тут по форуму, нашёл только вопрос о том, что то же самое не получается. Посмотрел доки по API, например, класс Image, но в нём нет подходящих функций. Кто-то делал подобное, можете подсказать?
...
Рейтинг: 0 / 0
Изменить размер картинки
    #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
Изменить размер картинки
    #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
Изменить размер картинки
    #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
Изменить размер картинки
    #33584826
J-Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Deady создать ByteArrayOutputStream и сохранить в него изображение с
помощью, например, ImageIO.write(image, "jpg", out);

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

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

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

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

Posted via ActualForum NNTP Server 1.3
...
Рейтинг: 0 / 0
Изменить размер картинки
    #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
Изменить размер картинки
    #33585471
JAI User
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
use JAI
...
Рейтинг: 0 / 0
Изменить размер картинки
    #33586698
J-Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
JAI Useruse JAI
Скачал, установил. Как использовать - ума не приложу. Посмотрел доки, примеров по сабжу не нашёл. Я подумал, если Вы его используете, может, подскажете, как Вы это делали? Я имею в виду проблему, описанную выше.
...
Рейтинг: 0 / 0
Изменить размер картинки
    #33586841
Фотография Denis Popov
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Поискать по JAI ?
...
Рейтинг: 0 / 0
Изменить размер картинки
    #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
Изменить размер картинки
    #33587547
е
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
е
Гость
В итоге, "ImageIcon i" вообще не нужно стало?
...
Рейтинг: 0 / 0
Изменить размер картинки
    #33587664
J-Pro
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
еВ итоге, "ImageIcon i" вообще не нужно стало?

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


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