Функции этого класса инструмента: масштабирование изображений, резание изображений, преобразование типа изображения, цвет в черно -белый, текстовый водяной знак, изображение водяного знака и т. Д.
Кода -копия выглядит следующим образом:
пакет net.kitbox.util;
импортировать java.awt.alphacomposite;
импортировать java.awt.color;
импортировать java.awt.font;
импортировать java.awt.graphics;
импортировать java.awt.graphics2d;
импортировать java.awt.image;
Импорт java.awt.renderinghints;
импортировать java.awt.toolkit;
импортировать java.awt.color.colorspace;
Импорт java.awt.image.bufferedImage;
импортировать java.awt.image.colorConvertop;
импортировать java.awt.image.cropimagefilter;
импортировать java.awt.image.filteredimagesource;
импортировать java.awt.image.imagefilter;
импортировать java.awt.image.imagingopexception;
Импорт java.io.file;
Импорт java.io.fileOutputStream;
импортировать java.io.ioexception;
Импорт javax.imageio.imageio;
/**
* Автор: Lldy
* Время: 2012-5-6 6:37:18
* Категория инструментов обработки изображений: <br>
* Функции: Увеличение изображения, вырезать изображение, преобразование типа изображения, цвет в черно -белый, текстовый водяной знак, изображение водяной знак и т. Д.
*/
открытый класс ImageUtils {
/**
* По сравнению с расположением картинки
*/
Private Static Final Position_upperleft = 0;
Частный статический окончательный Position_upperright = 10;
Private Static Final Position_lowerleft = 1;
Частный статический окончательный Position_lowerright = 11;
/**
* Несколько общих форматов картин
*/
Public Static String Image_type_gif = "GIF"; // Графический формат обмена
Public Static String Image_type_jpg = "jpg"; //
Public Static String Image_type_jpeg = "jpeg"; //
Public Static String Image_type_bmp = "bmp"; // английский растровый карт (растровый карт), это стандартный формат файла изображения в операционной системе Windows
Public Static String Image_type_png = "png"; // портативная сетевая графика
частное статическое экземпляр ImageUtils;
Private ImageUtils () {
экземпляр = это;
}
/**
* Получите экземпляр
* @возвращаться
*/
Public Static ImageUtils getInstance () {
if (ancess == null) {
exants = new ImageUtils ();
}
вернуть экземпляр;
}
public BufferedImage Image2bufferedImage (изображение изображения) {
System.out.println (image.getWidth (null));
System.out.println (image.getheight (null));
BufferedImage bufferedImage = new BufferedImage (image.getWidth (null), image.getheight (null), bufferedimage.type_int_argb);
Graphics2d g = bufferedimage.creategraphics ();
g.drawimage (изображение, нулевое, ноль);
g.dispose ();
System.out.println (BufferedImage.getWidth ());
System.out.println (BufferedImage.getheight ());
return BufferedImage;
}
/**
* Масштабировать и преобразовать формат и сохранить
* @param srcpath
* @param destpath Целевой путь
* @param ширина: ширина цели
* @param height: высокая цель
* @param format: формат файла
* @возвращаться
*/
Public Static Boolean Scaletofile (String Srcpath, String Destpath, INT ширина, int Height, формат строки) {
логический флаг = false;
пытаться {
File file = new File (srcpath);
File destfile = new File (destpath);
if (! destfile.getParentFile (). существует ()) {
destfile.getParentFile (). Mkdir ();
}
BufferedImage src = imageio.read (file);
Image Image = src.getScaledInstance (ширина, высота, image.scale_default);
BufferedImage Tag = new BufferedImage (ширина, высота, bufferedimage.type_int_rgb);
Graphics g = Tag.getGraphics ();
G.Drawimage (изображение, 0, 0, NULL);
g.dispose ();
flag = imageio.write (TAG, Format, New FileOutputStream (destFile)); // вывод в потоку файлов
} catch (ioException e) {
e.printstacktrace ();
}
вернуть флаг;
}
/**
* Масштабное изображение, этот метод возвращает изображение после того, как исходное изображение масштабируется на процент.
* @param inputimage
* pparam процентный процент разрешенный вход 0 <процент <10000
* @возвращаться
*/
Общедоступный статический шкала BuffereMage ScaleByperCentage (BuffereMage InputImage, int процент) {
// процент разрешен
if (0> процент || процент> 10000) {
Бросьте новое ImageingopePection («Ошибка :: Нелегальные параметры: процент->»+процент+», процент должен быть превышает 0 ~ менее 10000»);
}
// Получить исходный тип прозрачности изображения
int type = inputImage.getColormodel (). getTransparency ();
// Получить целевой размер изображения
int w = inputimage.getWidth ()*процент;
int h = inputImage.getheight ()*процент;
// Открыть анти-альцы
Рендерингинты рендерингинты = новые рендерингинты (renderinghints.key_interpolation,
Renderinghints.value_antialias_on);
// Использование высококачественного сжатия
renderinghints.put (renderinghints.key_interpolation, renderinghints.value_render_quality);
BufferedImage img = new BufferedImage (w, h, type);
Graphics2d graphics2d = img.creategraphics ();
graphics2d.setrenderinghints (рендеринг -синты);
graphics2d.drawimage (inputimage, 0, 0, w, h, 0, 0, inputimage
.getWidth (), inputImage.getheight (), null);
graphics2d.dispose ();
вернуть IMG;
/*Этот код вернет тип изображения
return inputImage.getScaledInstance (inputImage.getWidth ()*процент,
inputImage.getheight ()*процент, image.scale_smooth);
*/
}
/**
* Масштабирование изображения, этот метод возвращает изображение после того, как исходное изображение масштабируется пропорционально при заданном максимальном пределе ширины.
* @param inputimage
* @param maxwidth: максимально допустимая ширина после сжатия
* @param maxheight: максимально допустимая высота после сжатия
* @Throws java.io.ioException
* возвращаться
*/
Public Static BufferedImage ScaleBypixelRate (BuffereMage InputImage, int maxwidth, int maxheight) бросает исключение {
// Получить исходный тип прозрачности изображения
int type = inputImage.getColormodel (). getTransparency ();
int width = inputimage.getWidth ();
int height = inputimage.getheight ();
int newwidth = maxwidth;
int newheight = maxheight;
// Если указанная максимальная ширина превышает пропорцию
if (ширина*maxheight <height*maxwidth) {
newWidth = (int) (newheight*ширина/высота);
}
// Если указанная максимальная высота превышает пропорцию
if (ширина*maxheight> высота*maxwidth) {
newheight = (int) (newwidth*высота/ширина);
}
// Открыть анти-альцы
Рендерингинты рендерингинты = новые рендерингинты (renderinghints.key_interpolation,
Renderinghints.value_antialias_on);
// Использование высококачественного сжатия
renderinghints.put (renderinghints.key_interpolation, renderinghints.value_render_quality);
BufferedImage img = new BufferedImage (NewWidth, Newheight, Type);
Graphics2d graphics2d = img.creategraphics ();
graphics2d.setrenderinghints (рендеринг -синты);
graphics2d.drawimage (inputimage, 0, 0, newwidth, newheight, 0, 0, ширина, высота, нулевая);
graphics2d.dispose ();
вернуть IMG;
}
/**
* Масштабирование изображения, этот метод возвращает изображение после того, как исходное изображение масштабируется заданной шириной и пределом высоты.
* @param inputimage
* @param maxwidth: ширина после сжатия
* @param maxheight: высота после сжатия
* @Throws java.io.ioException
* возвращаться
*/
Public Static BufferedImage ScaleBypixel (BufferedImage InputImage, Int Newwidth, Int Newheight) бросает исключение {
// Получить исходный тип прозрачности изображения
int type = inputImage.getColormodel (). getTransparency ();
int width = inputimage.getWidth ();
int height = inputimage.getheight ();
// Открыть анти-альцы
Рендерингинты рендерингинты = новые рендеринг -синты (renderinghints.key_antialiasing,
Renderinghints.value_antialias_on);
// Использование высококачественного сжатия
renderinghints.put (renderinghints.key_rendering, renderinghints.value_render_quality);
BufferedImage img = new BufferedImage (NewWidth, Newheight, Type);
Graphics2d graphics2d = img.creategraphics ();
graphics2d.setrenderinghints (рендеринг -синты);
graphics2d.drawimage (inputimage, 0, 0, newwidth, newheight, 0, 0, ширина, высота, нулевая);
graphics2d.dispose ();
вернуть IMG;
}
/**
* Отрежьте изображение и верните изображение в указанном диапазоне
* @param inputimage
* @param x отправная точка горизонтальная ось
* @param y отправная точка вертикальная координата
* @param ширина.
* @param Высот высота. Высота изображения: если высота превышает изображение, оно будет изменено на оставшуюся высота изображения
* @param Fill Указывает, стоит ли заполнять, если размер целевого изображения превышает размер.
* @возвращаться
*/
Public Static BufferedImage Cut (BufferedImage inputImage, int x, int y, int width, int height, boolean fill) {
// Получить исходный тип прозрачности изображения
int type = inputImage.getColormodel (). getTransparency ();
int w = inputimage.getWidth ();
int h = inputImage.getheight ();
int endx = x+ширина;
int endy = y+высота;
if (x> w)
Бросьте новое ImagingopePection («горизонтальная ось отправной точки превышает диапазон исходного изображения»);
if (y> h)
бросить новое изображение («Вертикальная координата начальной точки превышает диапазон источника изображений»);
BufferedImage IMG;
// заполнить белый
if (fill) {
img = new BufferedImage (ширина, высота, тип);
// ширина превышает предел
if ((wx) <ширина) {
ширина = wx;
endx = w;
}
// высота превышает предел
if ((hy) <высота) {
высота = hy;
Endy = h;
}
// не ремонтируется
}еще{
// ширина превышает предел
if ((wx) <ширина) {
ширина = wx;
endx = w;
}
// высота превышает предел
if ((hy) <высота) {
высота = hy;
Endy = h;
}
img = new BufferedImage (ширина, высота, тип);
}
// Открыть анти-альцы
Рендерингинты рендерингинты = новые рендерингинты (renderinghints.key_interpolation,
Renderinghints.value_antialias_on);
// Использование высококачественного сжатия
renderinghints.put (renderinghints.key_interpolation, renderinghints.value_render_quality);
Graphics2d graphics2d = img.creategraphics ();
graphics2d.setrenderinghints (рендеринг -синты);
graphics2d.drawimage (inputimage, 0, 0, ширина, высота, x, y, endx, endy, null);
graphics2d.dispose ();
вернуть IMG;
}
/**
* Отрежьте изображение и верните указанную начальную позицию и изображение указанного размера
* @param inputimage
* @param Startpoint Point: Верхний слева: 0, Верхний справа: 10, внизу внизу: 1, внизу справа: 11
* @param ширина
* @param Высот высота изображения
* @param Fill Указывает, стоит ли заполнять, если размер целевого изображения превышает размер.
* @возвращаться
*/
Public Static BufferedImage Cut (BufferedImage InputImage, Int Startpoint, INT ширина, высота int, логическое залив) {
// Получить исходный тип прозрачности изображения
int type = inputImage.getColormodel (). getTransparency ();
int w = inputimage.getWidth ();
int h = inputImage.getheight ();
BufferedImage IMG;
// заполнить белый
if (fill) {
img = new BufferedImage (ширина, высота, тип);
if (ширина> w)
ширина = w;
if (высота> h)
высота = h;
// не ремонтируется
}еще{
if (ширина> w)
ширина = w;
if (высота> h)
высота = h;
img = new BufferedImage (ширина, высота, тип);
}
// Открыть анти-альцы
Рендерингинты рендерингинты = новые рендерингинты (renderinghints.key_interpolation,
Renderinghints.value_antialias_on);
// Использование высококачественного сжатия
renderinghints.put (renderinghints.key_interpolation, renderinghints.value_render_quality);
Graphics2d graphics2d = img.creategraphics ();
graphics2d.setrenderinghints (рендеринг -синты);
Switch (StartPoint) {
// вправо
case position_upperright:
graphics2d.drawimage (inputimage, w-width, 0, w, высота, 0, 0, ширина, высота, нулевая);
перерыв;
// внизу слева
case position_lowerleft:
graphics2d.drawimage (inputimage, 0, h-height, width, h, 0, 0, ширина, высота, нулевая);
перерыв;
// внизу справа
case position_lowerright:
graphics2d.drawimage (inputimage, w-width, h-height, w, h, 0, 0, width, высота, нулевая);
перерыв;
// по умолчанию в верхнем левом
case position_upperleft:
по умолчанию:
graphics2d.drawimage (inputimage, 0, 0, ширина, высота, 0, ширина, высота, нулевая);
}
graphics2d.dispose ();
вернуть IMG;
}
/**
* Поверните изображение под указанным углом: используйте тета, чтобы повернуть точку на положительной оси X в направлении положительной оси Y.
* @param inputimage
* @param Угол степени: в градусах
* @возвращаться
*/
Public Static BufferedImage rowateImage (Final BufferedImage inputImage,
окончательная степень) {
int w = inputimage.getWidth ();
int h = inputImage.getheight ();
int type = inputImage.getColormodel (). getTransparency ();
BufferedImage img = new BufferedImage (w, h, type);
Graphics2d graphics2d = img.creategraphics ();
// Открыть анти-альцы
Рендерингинты рендерингинты = новые рендерингинты (renderinghints.key_interpolation,
Renderinghints.value_antialias_on);
// Использование высококачественного сжатия
renderinghints.put (renderinghints.key_interpolation, renderinghints.value_render_quality);
graphics2d.setrenderinghints (рендеринг -синты);
graphics2d.rotate (math.toradians (степень), w / 2, h / 2);
graphics2d.drawimage (inputimage, 0, 0, null);
graphics2d.dispose ();
вернуть IMG;
}
/**
* Переверните изображение горизонтально
*
* @param BufferedImage Целевое изображение
* @возвращаться
*/
Public Static BufferedImage Fliphorizontalimage (Final BufferedImage inputImage) {
int w = inputimage.getWidth ();
int h = inputImage.getheight ();
BufferedImage IMG;
Graphics2d Graphics2d;
(graphics2d = (img = new BufferedImage (w, h, inputimage
.getColormodel (). getTransparency ())). CreateGraphics ())
.drawimage (inputimage, 0, 0, w, h, w, 0, 0, h, null);
graphics2d.dispose ();
вернуть IMG;
}
/**
* Переверните изображение по вертикали
*
* @param BufferedImage Целевое изображение
* @возвращаться
*/
Public Static BufferedImage FlipverticalicalImage (Final BufferedImage inputImage) {
int w = inputimage.getWidth ();
int h = inputImage.getheight ();
BufferedImage IMG;
Graphics2d Graphics2d;
(graphics2d = (img = new BufferedImage (w, h, inputimage
.getColormodel (). getTransparency ())). CreateGraphics ())
.drawimage (inputimage, 0, 0, w, h, 0, h, w, 0, null);
graphics2d.dispose ();
вернуть IMG;
}
/**
* Изображение водяного знака
*
* @param inputimage
* Изображения, которые будут обработаны
* @param markimage
* Изображение водяного знака
* @param x
* Водяной знак расположен в верхнем левом углу картинки.
* @param y
* Водяной знак расположен в верхнем левом углу картинки.
* @param Альфа
* Прозрачность водяного знака 0,1f ~ 1,0F
* */
Public Static BufferedImage Watermark (BufferedImage inputImage, BufferedImage Markimage, Int X, Int Y,
float alpha) {
BufferedImage Image = new BufferedImage (inputImage.getWidth (), inputImage
.getheight (), BufferedImage.type_int_argb);
Graphics2d g = image.creategraphics ();
g.drawimage (inputimage, 0, 0, null);
// Загрузите изображение водяного знака
g.setcomposite (alphacomposite.getinstance (alphacomposite.src_atop,
альфа));
g.drawimage (Markimage, x, y, null);
g.dispose ();
вернуть изображение;
}
/**
* Текст водяной знак
*
* @param inputimage
* Изображения, которые будут обработаны
* @param текст
* Текст водяного знака
* @param font
* Информация о шрифте водяного знака
* @param color
* Цвет шрифта водяного знака
* @param x
* Водяной знак расположен в верхнем левом углу картинки.
* @param y
* Водяной знак расположен в верхнем левом углу картинки.
* @param Альфа
* Прозрачность водяного знака 0,1f ~ 1,0F
*/
Public Static BufferedImage TextMark (BuffereMage InputImage, String Text, Font Font,
Цвет цвета, int x, int y, float alpha) {
Font dfont = (font == null)?
BufferedImage Image = new BufferedImage (inputImage.getWidth (), inputImage
.getheight (), BufferedImage.type_int_argb);
Graphics2d g = image.creategraphics ();
g.drawimage (inputimage, 0, 0, null);
g.setcolor (цвет);
g.setfont (dfont);
g.setcomposite (alphacomposite.getinstance (alphacomposite.src_atop,
альфа));
g.drawstring (текст, x, y);
g.dispose ();
вернуть изображение;
}
/**
* Цвет изображения к черно -белому
* @param inputimage
* @return преобразован BufferedImage
*/
Public Final Static BufferedImage Togray (BufferedImage InputImage)
{
Colorspace cs = colorspace.getInstance (colorspace.cs_gray);
// Преобразование цвета исходного буферемажа. Если целевое изображение равна нулю,
// Создать буферизацию на основе соответствующей Colormodel.
ColorConvertop Op = новый ColorConvertop (CS, NULL);
return op.filter (inputimage, null);
}
/**
* Цвет изображения становится черно -белым
* @param srcimagefile
* Адрес изображения источника
* @param destimagefile
* Адрес целевого изображения
* @param formattype
* Формат целевого изображения: если форматтип является нулевым;
*/
Public Final Static Void Togray (String srcimagefile, String destimagefile, String Formattype)
{
пытаться
{
BufferedImage src = imageio.read (новый файл (srcimagefile));
Colorspace cs = colorspace.getInstance (colorspace.cs_gray);
ColorConvertop Op = новый ColorConvertop (CS, NULL);
src = op.filter (src, null);
// Если форматтип является нулевым;
if (formattype == null) {
formattype = "png";
}
Imageio.write (src, formattype, новый файл (destimagefile));
} catch (ioException e)
{
e.printstacktrace ();
}
}
/**
* Преобразование типа изображения: GIF-> JPG, GIF-> PNG, PNG-> JPG, PNG-> GIF (X), BMP-> PNG
*
* @param inputimage
* Адрес изображения источника
* @param formattype
* Строка, содержащая неформальные названия форматов: например, JPG, JPEG, GIF и т. Д.
* @param destimagefile
* Адрес целевого изображения
*/
Public Final Static Void преобразование (BufferedImage InputImage, String Formattype, String Destimagefile)
{
пытаться
{
Imageio.write (inputimage, formattype, новый файл (destimagefile));
} Catch (Exception E)
{
e.printstacktrace ();
}
}
/**
* Резка изображения (укажите количество строк и столбцов срезов)
*
* @param srcimagefile
* Адрес изображения источника
* @param destdir
* Нарежьте целевую папку
* @param formattype
* Целевой формат
* @param Rows
* Количество рядов целевых срезов. По умолчанию 2, должен находиться в пределах диапазона [1, 20]
* @param cols
* Количество целевых срезов. По умолчанию 2, должен находиться в пределах диапазона [1, 20]
*/
публичный окончательный статический разрез void (BuffereMage InputImage, String Destdir,
Строка Formattype, int Rows, Int Cols)
{
пытаться
{
if (Rows <= 0 || Rows> 20)
ряды = 2;
if (cols <= 0 || cols> 20)
Cols = 2;
// Читать изображение источника
// BufferedImage bi = imageio.read (новый файл (srcimagefile));
int w = inputimage.getheight ();
int h = inputImage.getWidth ();
if (w> 0 && h> 0)
{
Изображение IMG;
Imagefilter Cropfilter;
Image Image = inputImage.getScaledInstance (w, h,
Image.scale_default);
int destwidth = w; // Ширина каждого среза
int destheight = h; // высота каждого среза
// Рассчитайте ширину и высоту среза
if (w % cols == 0)
{
destwidth = w / cols;
} еще
{
destwidth = (int) math.floor (w / cols) + 1;
}
if (h % rows == 0)
{
destheight = h / ряд;
} еще
{
destheight = (int) math.floor (h / rows) + 1;
}
// Создать ломтики в цикле
// Идея улучшения: можно ли использовать многопоточное честь для ускорения скорости резки
для (int i = 0; i <rous; i ++)
{
for (int j = 0; j <cols; j ++)
{
// Четыре параметра - это координата и ширины и высоты, ширина и высота
// это: respimagefilter (int x, int y, int width, int height)
Cropfilter = новый Cropimagefilter (J * destwidth, i
* destheight, destwidth, destheight);
img = toolkit.getDefaulttoolkit (). CreateImage (
new Filteredimagesource (image.getSource (),
Cropfilter));
BufferedImage Tag = New BufferedImage (DestWidth,
destheight, bufferemage.type_int_argb);
Graphics g = Tag.getGraphics ();
G.Drawimage (IMG, 0, 0, NULL);
g.dispose ();
// Вывод в виде файла
Imageio.write (Tag, Formattype, новый файл (destdir + "_r" + i
+ "_c" + j + "." + formattype.tolowercase ()));
}
}
}
} Catch (Exception E)
{
e.printstacktrace ();
}
}
/**
* Добавить текстовый водяной знак в картинку
*
* @param presstext
* Текст водяного знака
* @param srcimagefile
* Адрес изображения источника
* @param destimagefile
* Адрес целевого изображения
* @param fontname
* Название шрифта водяного знака
* @param fontstyle
* Стиль шрифта водяного знака
* @param color
* Цвет шрифта водяного знака
* @param fontsize
* Размер шрифта водяного знака
* @param x
* Исправленное значение
* @param y
* Исправленное значение
* @param Альфа
* Прозрачность: Альфа должна быть плавающей температурой в диапазоне [0,0, 1,0] (включая граничные значения)
* @param formattype
* Целевой формат
*/
public final Static void presstext (String presstext, String srcimagefile,
String destimagefile, String fontname, int fontstyle, цвет,
int fontsize, int x, int y, float alpha, string formattype)
{
пытаться
{
File img = new File (srcimagefile);
Image src = imageio.read (img);
int width = src.getwidth (null);
int height = src.getheight (null);
BufferedImage Image = New BufferedImage (ширина, высота,
BufferedImage.type_int_argb);
Graphics2d g = image.creategraphics ();
g.drawimage (src, 0, 0, ширина, высота, нулевая);
g.setcolor (цвет);
g.setfont (новый шрифт (fontname, fontstyle, fontsize));
g.setcomposite (alphacomposite.getinstance (alphacomposite.src_atop,
альфа));
// рисовать текст водяного знака в указанных координатах
G.DrawString (нажатие текста, (ширина - (getLength (presstext) * fontsize))
/ 2 + x, (высота - fontsize) / 2 + y);
g.dispose ();
Imageio.write ((BuffereMage) изображение, Formattype,
Новый файл (destimagefile)); // вывод в потоку файла
} Catch (Exception E)
{
e.printstacktrace ();
}
}
/**
* Добавить водяной знак изображения в изображение
*
* @param pressimg
* Изображение водяного знака
* @param srcimagefile
* Адрес изображения источника
* @param destimagefile
* Адрес целевого изображения
* @param x
* Фиксированное значение. По умолчанию в середине
* @param y
* Фиксированное значение. По умолчанию в середине
* @param Альфа
* Прозрачность: Альфа должна быть плавающей температурой в диапазоне [0,0, 1,0] (включая граничные значения)
* @param formattype
* Целевой формат
*/
Public Final Static void PressImage (String Pressimg, String Srcimagefile,
String destimagefile, int x, int y, float alpha, string formattype)
{
пытаться
{
File img = new File (srcimagefile);
Image src = imageio.read (img);
int wideth = src.getwidth (null);
int height = src.getheight (null);
BufferedImage Image = New BufferedImage (Wareth, высота,
BufferedImage.type_int_argb);
Graphics2d g = image.creategraphics ();
g.drawimage (src, 0, 0, wareth, высота, нулевая);
// Файл Watermark
Image src_biao = imageio.read (новый файл (pressimg));
int wideth_biao = src_biao.getWidth (null);
int height_biao = src_biao.getheight (null);
g.setcomposite (alphacomposite.getinstance (alphacomposite.src_atop,
альфа));
g.drawimage (src_biao, (wiveth - wideth_biao) / 2,
(высота - высота_биао) / 2, wideth_biao, height_biao, null);
// конец файла водяного знака
g.dispose ();
Imageio.write ((BuffereMage) изображение, Formattype,
новый файл (destimagefile));
} Catch (Exception E)
{
e.printstacktrace ();
}
}
/**
* Рассчитайте длину текста (один китайский считает два символа)
*
* @param текст
* @возвращаться
*/
Public Final Static int getLength (String Text)
{
int length = 0;
для (int i = 0; i <text.length (); i ++)
{
if (new String (text.charat (i) + "") .getbytes (). Длина> 1)
{
длина += 2;
} еще
{
длина += 1;
}
}
Длина возврата / 2;
}
}
Очень практичная функция обработки изображений, я надеюсь, что вам понравится.