Java 图片裁切及放大缩小, 仅供参考, 要学会举一反三, 其它问题欢迎交流...
import java.awt.Color; import java.awt.Graphics2D; import java.awt.Image; import java.awt.image.BufferedImage; import java.io.File; import java.io.IOException; import javax.imageio.ImageIO; /** * @author Colin Davis ( nilocsivad@hotmail.com ) * */ public final class DealImage { private File folder; public static final String[] ACCEPT_IMG_TYPES = { ".png", ".jpg", ".jpeg" }; public DealImage(String folder) { this.folder = new File(folder); } public void DealImages() throws IOException { for ( File file : this.folder.listFiles() ) { if ( file.isFile() && this.IsAcceptImage(file) ) { this.Write2File(this.Img2Square(file, 200), this.FileSuffix(file), file.getAbsolutePath(), "square"); } } } public boolean IsAcceptImage(File file) { boolean accept = false; String fileName = file.getName(); for ( String type : ACCEPT_IMG_TYPES ) { if ( fileName.endsWith(type) ) { accept = true; break; } } return accept; } public void Cut2Square(final File imgFile, final int sideLen) throws IOException { String formatName = FileSuffix(imgFile); Image img = this.Img2Square(imgFile, sideLen); BufferedImage bufImg = new BufferedImage(sideLen, sideLen, BufferedImage.TYPE_INT_RGB); Graphics2D g2d = bufImg.createGraphics(); // ** 创建画板 g2d.drawImage(img, 0, 0, sideLen, sideLen, null); // ** 把 img(图像) 画到指定位置(x:0, y:0)指定区域(x:sideLen + 0, y:sideLen + 0) g2d.dispose(); String destFile = imgFile.getAbsolutePath() + ".square" + formatName; ImageIO.write(bufImg, formatName.substring(1), new File(destFile)); } /** * 缩小, 缩小比例为 图片大小(宽或高)/sideLen */ private BufferedImage Img2Small(File imgFile, final int sideLen) throws IOException { String formatName = FileSuffix(imgFile); if (formatName.toLowerCase().equals(".jpeg")) { imgFile = RenameJpeg2Jpg(imgFile); formatName = ".jpg"; } BufferedImage img = ImageIO.read(imgFile); int imgWidth = img.getWidth(), imgHeight = img.getHeight(), newWidth = sideLen, newHeight = sideLen; if ( imgHeight > sideLen || imgWidth > sideLen ) { float scale = ( imgWidth > imgHeight ? imgWidth * 0.1f / sideLen : imgHeight * 0.1f / sideLen ) + 0.1f; newWidth = (int) (imgWidth * scale); newHeight = (int) (imgHeight * scale); } BufferedImage bi = new BufferedImage(newWidth, newHeight, BufferedImage.TYPE_INT_RGB); Graphics2D g2d = bi.createGraphics(); g2d.drawImage(img, 0, 0, newWidth, newHeight, null); g2d.dispose(); return bi; } /** * 缩小后到图片变成正方形, 用白色补齐空白区域 */ private BufferedImage Img2Square(File imgFile, int sideLen) throws IOException { Image img = this.Img2Small(imgFile, sideLen); int imgWidth = img.getWidth(null), imgHeight = img.getHeight(null); sideLen = imgWidth > imgHeight ? imgWidth : imgHeight; BufferedImage bufImg = new BufferedImage(sideLen, sideLen, BufferedImage.TYPE_INT_RGB); Graphics2D g2d = bufImg.createGraphics(); g2d.setColor(Color.WHITE); g2d.fillRect(0, 0, sideLen, sideLen); int toX = ( sideLen - imgWidth ) / 2, toY = ( sideLen - imgHeight ) / 2; g2d.drawImage(img, toX, toY, imgWidth, imgHeight, null); g2d.dispose(); return bufImg; } public File RenameJpeg2Jpg(File jpegFile) throws IOException { String imgName = jpegFile.getName(); int idx = imgName.lastIndexOf("."); File destFile = new File(jpegFile.getParentFile(), imgName.substring(0, idx) + ".jpg"); jpegFile.renameTo(destFile); return destFile; } public String FileSuffix(File file) { int idx = file.getName().lastIndexOf("."); return idx > 0 ? file.getName().substring(idx) : ""; } public void Write2File(final BufferedImage img, String fmt, String path, String append) throws IOException { String outFile = path + "." + append + fmt; ImageIO.write(img, fmt.substring(1), new File(outFile)); } public static void main(String[] args) throws IOException { DealImage si = new DealImage("/home/cpu/images/"); si.DealImages(); } }
相关推荐
9. **ZoomImageDemo**:这可能是项目中的一个核心类或者页面,用于实现图片的放大、缩小和裁剪操作。它可能包含了展示图片、获取用户裁剪选择、执行裁剪操作等功能。 综上所述,"jsp图片裁切源码(仿开心网)"涉及...
通过调整图像的宽度和高度比例,我们可以确保图片在放大或缩小后不会失真。例如,可以使用`resize()`方法来改变图像尺寸,参数为新尺寸的宽度和高度。注意,如果只传入一个参数,SimpleImage会按照原图宽高比自动...
最后,对于“放大缩小”效果,可以使用`Matrix`类对图片进行缩放,并结合`ScaleGestureDetector`监听用户的双指缩放手势,实时更新ImageView的ScaleMatrix。这需要自定义一个`ImageView`子类,并重写`onTouchEvent()...
5. 实现地图交互功能,如图层切换、放大缩小、点击获取信息等。 总的来说,这个项目结合了Java的通用性、Geotools的地理空间处理能力、WContour的专业等值线计算以及OpenLayers的Web地图展示,为用户提供了一个完整...
图片缩放(Image Scaling)是调整图像的大小,可以是放大或缩小。在编程中,我们同样可以利用上述图像库来完成。例如,使用OpenCV进行图像缩放的代码: ```cpp #include cv::Mat img = cv::imread("input.jpg"); ...
```java public class ImageTouchActivity extends AppCompatActivity implements View.OnTouchListener, ScaleGestureDetector.OnScaleGestureListener { private ImageView imageView; private Matrix matrix = ...
- **缩放**:图片缩放是调整图片尺寸的过程,可以按比例缩小或放大图片。这通常通过Java的图像处理库如Java AWT或Swing的`Image`类来实现。开发者需要计算新的宽度和高度,然后使用`getScaledInstance()`方法进行...