Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/image/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 裁剪和调整图像大小会产生更大的尺寸吗?_C#_Image_Image Processing - Fatal编程技术网

C# 裁剪和调整图像大小会产生更大的尺寸吗?

C# 裁剪和调整图像大小会产生更大的尺寸吗?,c#,image,image-processing,C#,Image,Image Processing,我尝试使用克隆方法裁剪图像并调整其大小。它可以工作,但输出大小太大了。我做错什么了吗 var filename = Server.MapPath("1.jpg"); >> 66 kb, width:960px, height:637px Bitmap img = new Bitmap(filename); Bitmap original = new Bitmap(filename);

我尝试使用克隆方法裁剪图像并调整其大小。它可以工作,但输出大小太大了。我做错什么了吗

var filename = Server.MapPath("1.jpg");   >> 66 kb, width:960px, height:637px
                Bitmap img = new Bitmap(filename);


                Bitmap original = new Bitmap(filename);
                Rectangle cloneRect = new Rectangle(230, 0, 540, img.Height);
                PixelFormat format = img.PixelFormat;
                Bitmap clone = (Bitmap)original.Clone(cloneRect, format);    

                var newImg = resizeImage((Image)clone, new Size(210, 210));    

                newImg.Save(@"f:\2.jpg");  >> output size: 82 kb

 private static Image resizeImage(Image imgToResize, Size size)
    {
        int sourceWidth = imgToResize.Width;
        int sourceHeight = imgToResize.Height;

        float nPercent = 0;
        float nPercentW = 0;
        float nPercentH = 0;

        nPercentW = ((float)size.Width / (float)sourceWidth);
        nPercentH = ((float)size.Height / (float)sourceHeight);

        if (nPercentH < nPercentW)
            nPercent = nPercentH;
        else
            nPercent = nPercentW;

        int destWidth = (int)(sourceWidth * nPercent);
        int destHeight = (int)(sourceHeight * nPercent);

        Bitmap b = new Bitmap(destWidth, destHeight);
        Graphics g = Graphics.FromImage((Image)b);
        g.InterpolationMode = InterpolationMode.HighQualityBicubic;

        g.DrawImage(imgToResize, 0, 0, destWidth, destHeight);
        g.Dispose();

        return (Image)b;
    }
var filename=Server.MapPath(“1.jpg”);>>66 kb,宽:960像素,高:637像素
位图img=新位图(文件名);
位图原始=新位图(文件名);
矩形cloneRect=新矩形(230,0,540,img.高度);
PixelFormat=img.PixelFormat;
位图克隆=(位图)原始.clone(克隆,格式);
var newImg=resizeImage((图像)克隆,新大小(210210));
newImg.Save(@“f:\2.jpg”);>>输出大小:82 kb
专用静态图像大小图像(图像imgToResize,大小)
{
int sourceWidth=imgToResize.Width;
int sourceHeight=imgToResize.Height;
浮动百分比=0;
浮动nPercentW=0;
浮点数nPercentH=0;
nPercentW=((float)size.Width/(float)sourceWidth);
nPercentH=((浮点)size.Height/(浮点)sourceHeight);
如果(nPercentH
是的,因为您没有指定任何压缩格式,Image.Save方法()和指定的参数来以jpeg格式保存文件,所以它将解决此问题

使用此功能保存图像

    /// <summary>
    /// Saves the image to  specified stream and format.
    /// </summary>
    /// <param name="image">The image to save.</param>
    /// <param name="outputStream">The stream to used.</param>
    /// <param name="format">The format of new image.</param>
    /// <param name="quality">The quality of the image in percent.</param>
    public static void SaveTo(this Image image, Stream outputStream, ImageFormat format, int quality)
    {
        EncoderParameters encoderParameters = new EncoderParameters(1);
        encoderParameters.Param[0] = new EncoderParameter(Encoder.Quality, quality);
        ImageCodecInfo[] encoders = ImageCodecInfo.GetImageEncoders();
        if (format == ImageFormat.Gif)
        {
            image.Save(outputStream, ImageFormat.Gif);
        }
        else if (format == ImageFormat.Jpeg)
        {
            image.Save(outputStream, encoders[1], encoderParameters);
        }
        else if (format == ImageFormat.Png)
        {
            image.Save(outputStream, encoders[4], encoderParameters);
        }
        else if (format == ImageFormat.Bmp)
        {
            image.Save(outputStream, encoders[0], encoderParameters);
        }
        else
        {
            image.Save(outputStream, format);
        }
    }
//
///将图像保存为指定的流和格式。
/// 
///要保存的图像。
///要使用的流。
///新图像的格式。
///以百分比表示的图像质量。
公共静态void SaveTo(此图像图像、流输出流、图像格式、int质量)
{
EncoderParameters EncoderParameters=新的EncoderParameters(1);
encoderParameters.Param[0]=新的EncoderParameter(Encoder.Quality,Quality);
ImageCodecInfo[]编码器=ImageCodecInfo.GetImageEncoders();
if(format==ImageFormat.Gif)
{
保存(outputStream,ImageFormat.Gif);
}
else if(format==ImageFormat.Jpeg)
{
保存(outputStream,编码器[1],编码器参数);
}
else if(format==ImageFormat.Png)
{
保存(outputStream,编码器[4],编码器参数);
}
else if(format==ImageFormat.Bmp)
{
保存(outputStream,编码器[0],编码器参数);
}
其他的
{
保存(输出流,格式);
}
}

对于JPEG,压缩级别会影响保存的大小。在比较之前,确保它们是相同的。了解一些细节。