mirror of
https://github.com/Noratrieb/killua-bot.git
synced 2026-01-14 15:15:01 +01:00
New way of rescaling images
This commit is contained in:
parent
193674d6f0
commit
b5295707bb
1 changed files with 19 additions and 15 deletions
|
|
@ -8,8 +8,12 @@ import net.dv8tion.jda.api.entities.Member;
|
||||||
import net.dv8tion.jda.api.entities.Message;
|
import net.dv8tion.jda.api.entities.Message;
|
||||||
|
|
||||||
import javax.imageio.ImageIO;
|
import javax.imageio.ImageIO;
|
||||||
|
import javax.swing.*;
|
||||||
import java.awt.*;
|
import java.awt.*;
|
||||||
|
import java.awt.geom.AffineTransform;
|
||||||
|
import java.awt.image.AffineTransformOp;
|
||||||
import java.awt.image.BufferedImage;
|
import java.awt.image.BufferedImage;
|
||||||
|
import java.awt.image.RenderedImage;
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
import java.net.URL;
|
import java.net.URL;
|
||||||
import java.util.HashMap;
|
import java.util.HashMap;
|
||||||
|
|
@ -115,22 +119,22 @@ public class EmoteAddCommand extends Command {
|
||||||
|
|
||||||
private byte[] resizeImage(byte[] bytes, String format, int size) throws IOException {
|
private byte[] resizeImage(byte[] bytes, String format, int size) throws IOException {
|
||||||
reply("Image size too big (" + bytes.length / 1000 + "kB). Resizing image...");
|
reply("Image size too big (" + bytes.length / 1000 + "kB). Resizing image...");
|
||||||
Image image = ImageIO.read(new ByteArrayInputStream(bytes));
|
BufferedImage image = ImageIO.read(new ByteArrayInputStream(bytes));
|
||||||
double ratio = (double)image.getHeight(null) / (double)image.getWidth(null);
|
double ratio = (double) image.getHeight(null) / (double) image.getWidth(null);
|
||||||
image = image.getScaledInstance(size, (int) (size * ratio), Image.SCALE_SMOOTH);
|
// Resize the image with the correct ratio
|
||||||
ByteArrayOutputStream out = new ByteArrayOutputStream();
|
AffineTransform trm = new AffineTransform();
|
||||||
|
trm.scale(size / (double) image.getHeight(), (image.getHeight() * ratio) / image.getHeight());
|
||||||
|
final AffineTransformOp operation = new AffineTransformOp(trm, AffineTransformOp.TYPE_BILINEAR);
|
||||||
|
BufferedImage newImage = new BufferedImage(size, (int) (size * ratio), BufferedImage.TYPE_INT_ARGB);
|
||||||
|
newImage = operation.filter(image, newImage);
|
||||||
|
|
||||||
BufferedImage bufferedImg = new BufferedImage(image.getWidth(null), image.getHeight(null), BufferedImage.TYPE_INT_ARGB);
|
ByteArrayOutputStream baos = new ByteArrayOutputStream();
|
||||||
Graphics2D bGr = bufferedImg.createGraphics();
|
ImageIO.write(newImage, format, baos);
|
||||||
bGr.drawImage(image, 0, 0, null);
|
byte[] newBytes = baos.toByteArray();
|
||||||
bGr.dispose();
|
|
||||||
|
|
||||||
ImageIO.write(bufferedImg, format, out);
|
if(newBytes.length > MAX_EMOTE_SIZE)
|
||||||
bytes = out.toByteArray();
|
newBytes = resizeImage(newBytes, format, size - 100);
|
||||||
if (bytes.length > MAX_EMOTE_SIZE) {
|
|
||||||
return resizeImage(bytes, format, size - 100);
|
return newBytes;
|
||||||
} else {
|
|
||||||
return bytes;
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue