在Android中,我所定义的ImageView的layout_width是fill_parent(可能需要在电话的全宽).
如果我放的图像ImageView大于layout_width,那么Android会缩放它,对吧?但身高呢?当Android缩放图像时,它会保持纵横比吗?
我发现,ImageView当Android缩放比图像大的图像时,顶部和底部有一些空白区域ImageView.真的吗?如果是,我该如何消除那个空白区?
我想在C#中缩放图像,其质量水平与Photoshop一样好.有没有可用的C#图像处理库来做这件事?
我正在尝试使用HTML img标签显示一些大图像.此刻他们离开了屏幕的边缘; 如何缩放它们以保持在浏览器窗口内?
或者在可能发生这种情况的情况下,是否有可能至少说"以正常宽度和高度的50%显示此图像"?
宽度和高度属性会扭曲图像 - 据我所知,这是因为它们指的是容器最终可能出现的任何属性,这与图像无关.我无法指定像素,因为我必须处理每个具有不同像素大小的大量图像.最大宽度不起作用.
我正在尝试调整图像大小,同时保留原始图像的宽高比,这样新图像看起来不会被压扁.
例如:
将150*100图像转换为150*150图像.
高度的额外50个像素需要用白色背景颜色填充.
这是我正在使用的当前代码.
它适用于调整大小,但更改原始图像的宽高比会压缩新图像.
private void resizeImage(string path, string originalFilename,
int width, int height)
{
Image image = Image.FromFile(path + originalFilename);
System.Drawing.Image thumbnail = new Bitmap(width, height);
System.Drawing.Graphics graphic =
System.Drawing.Graphics.FromImage(thumbnail);
graphic.InterpolationMode = InterpolationMode.HighQualityBicubic;
graphic.SmoothingMode = SmoothingMode.HighQuality;
graphic.PixelOffsetMode = PixelOffsetMode.HighQuality;
graphic.CompositingQuality = CompositingQuality.HighQuality;
graphic.DrawImage(image, 0, 0, width, height);
System.Drawing.Imaging.ImageCodecInfo[] info =
ImageCodecInfo.GetImageEncoders();
EncoderParameters encoderParameters;
encoderParameters = new EncoderParameters(1);
encoderParameters.Param[0] = new EncoderParameter(Encoder.Quality,
100L);
thumbnail.Save(path + width + "." + originalFilename, info[1],
encoderParameters);
}
Run Code Online (Sandbox Code Playgroud)
编辑:我想填充图像而不是裁剪
经常被问到,从来没有回答过(至少不是以可重复的方式).
我有一个图像视图,其图像小于视图.我想将图像缩放到屏幕的宽度,并调整ImageView的高度以反映图像的比例正确高度.
<ImageView
android:layout_width="fill_parent"
android:layout_height="wrap_content"
/>
Run Code Online (Sandbox Code Playgroud)
这导致图像以其原始尺寸(小于屏幕宽度)为中心,边缘为边缘.不好.
所以我补充道
android:adjustViewBounds="true"
Run Code Online (Sandbox Code Playgroud)
同样的效果,没有好处.我补充道
android:scaleType="centerInside"
Run Code Online (Sandbox Code Playgroud)
同样的效果,没有好处.我换centerInside了fitCenter.同样的效果,没有好处.我换centerInside了centerCrop.
android:scaleType="centerCrop"
Run Code Online (Sandbox Code Playgroud)
现在,最后,图像缩放到屏幕的宽度 - 但在顶部和底部裁剪!所以我改变了centerCrop对fitXY.
android:scaleType="fitXY"
Run Code Online (Sandbox Code Playgroud)
现在,图像缩放到屏幕的宽度,但没有在y轴上缩放,导致图像失真.
删除android:adjustViewBounds="true"无效.android:layout_gravity如其他地方所建议的,添加一个也没有效果.
我尝试过其他组合 - 无济于事.所以,请有人知道:
如何设置ImageView的XML来填充屏幕的宽度,缩放较小的图像以填充整个视图,显示具有宽高比的图像而不会失真或裁剪?
编辑:我也尝试设置任意数字高度.这仅对centerCrop设置有影响.它会根据视图高度垂直扭曲图像.
在javadocs之后,我试图扩展一个BufferedImage没有成功的是我的代码:
BufferedImage image = MatrixToImageWriter.getBufferedImage(encoded);
Graphics2D grph = image.createGraphics();
grph.scale(2.0, 2.0);
grph.dispose();
Run Code Online (Sandbox Code Playgroud)
我无法理解为什么它不起作用,有什么帮助吗?
我正在开发一个ASP.NET 3.5 Web应用程序,我允许我的用户上传jpeg,gif,bmp或png图像.如果上传的图片尺寸大于103 x 32,我想将上传的图片大小调整为103 x 32.我已经阅读了一些博文和文章,并且还尝试了一些代码示例,但似乎没有什么工作正常.有没有人成功做到这一点?
假设我的图像是2322像素x 4128像素.如何缩放它以使宽度和高度都小于1028px?
我将无法使用Image.resize(https://pillow.readthedocs.io/en/latest/reference/Image.html#PIL.Image.Image.resize)因为这需要我给出新的宽度和高度.我打算做的是(下面的伪代码):
if (image.width or image.height) > 1028:
if image.width > image.height:
tn_image = image.scale(make width of image 1028)
# since the height is less than the width and I am scaling the image
# and making the width less than 1028px, the height will surely be
# less than 1028px
else: #image's height is greater than it's width
tn_image = image.scale(make height of image 1028)
Run Code Online (Sandbox Code Playgroud)
我猜我需要使用Image.thumbnail,但根据这个例子(http://pillow.readthedocs.org/en/latest/reference/Image.html#create-thumbnails)和这个答案(如何使用PIL调整图像大小并保持其宽高比?),提供宽度和高度以创建缩略图.是否有任何功能可以采用新的宽度或新的高度(不是两者)并缩放整个图像?
我正在寻找一种方法来使用位图作为Glide的输入.我甚至不确定它是否可能.这是为了调整大小的目的.Glide具有良好的图像增强功能.问题是我有资源作为位图已经加载到内存.我能找到的唯一解决方案是将图像存储到临时文件中,并将它们作为inputStream/file重新加载回Glide ..有没有更好的方法来实现?
请在回答之前..我不是在谈论Glide的输出.. .asBitmap().get()我知道.我需要帮助输入.
这是我的解决方案:
Bitmap bitmapNew=null;
try {
//
ContextWrapper cw = new ContextWrapper(ctx);
File directory = cw.getDir("imageDir", Context.MODE_PRIVATE);
File file=new File(directory,"temp.jpg");
FileOutputStream fos = new FileOutputStream(file);
bitmap.compress(Bitmap.CompressFormat.PNG, 90, fos);
fos.close();
//
bitmapNew = Glide
.with(ctx)
.load(file)
.asBitmap()
.diskCacheStrategy(DiskCacheStrategy.NONE)
.skipMemoryCache(true)
.into( mActualWidth, mActualHeight - heightText)
.get();
file.delete();
} catch (Exception e) {
Logcat.e( "File not found: " + e.getMessage());
}
Run Code Online (Sandbox Code Playgroud)
我想避免将图像写入内部并再次加载它们.这就是为什么我要问是否有办法将输入作为位图
谢谢