1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 |
var formFile = Request.Form.Files["furniture"]; if (formFile != null) { using (var ms = new MemoryStream()) //TEST { // IFormFile - MemoryStream - Byte[] - FileStream // コンコードしていないのでBmp読込/書出可能 await formFile.CopyToAsync(ms); var byteArray = ms.ToArray(); string extension = System.IO.Path.GetExtension(formFile.FileName); using var fs = new FileStream(_environment.WebRootPath + "/Image/" + "1_" + testTable33.Id.ToString() + extension, FileMode.Create); //同名ファイルがあると上書きされる await fs.WriteAsync(byteArray, 0, byteArray.Length); } using (var ms = new MemoryStream()) //TEST { // IFormFile - MemoryStream - Byte[] - SKImage - Encode(png) - FileStream // Pngの部分をBmpにするとエラー await formFile.CopyToAsync(ms); var byteArray = ms.ToArray(); SKImage image = SkiaSharp.SKImage.FromEncodedData(byteArray); var data = image.Encode(SKEncodedImageFormat.Png, 100); using var fs = new FileStream(_environment.WebRootPath + "/Image/" + "2_" + testTable33.Id.ToString() + ".png", FileMode.Create); //同名ファイルがあると上書きされる data.SaveTo(fs); } using (var ms = new MemoryStream()) //TEST { // IFormFile - MemoryStream - Byte[] - SKBitmap - Encode(png) - FileStream // Pngの部分をBmpにするとエラー await formFile.CopyToAsync(ms); var byteArray = ms.ToArray(); SKBitmap bitmap = SKBitmap.Decode(byteArray); var data = bitmap.Encode(SKEncodedImageFormat.Png, 100); using var fs = new FileStream(_environment.WebRootPath + "/Image/" + "3_" + testTable33.Id.ToString() + ".png", FileMode.Create); //同名ファイルがあると上書きされる data.SaveTo(fs); } using (var ms = new MemoryStream()) //TEST { // IFormFile - MemoryStream - Byte[] - SKBitmap - Encode(png) - FileStream // Pngの部分をBmpにするとエラー await formFile.CopyToAsync(ms); var byteArray = ms.ToArray(); SKBitmap bitmap = SKBitmap.Decode(byteArray); using var fs = new FileStream(_environment.WebRootPath + "/Image/" + "4_" + testTable33.Id.ToString() + ".png", FileMode.Create); //同名ファイルがあると上書きされる bitmap.Encode(fs,SKEncodedImageFormat.Png, 100); // SKBitmapの場合StreamをTargetにできる } using (var ms = new MemoryStream()) //TEST { // IFormFile - MemoryStream - Byte[] - SKBitmap - Encode(png) - MemoryStream - FileStream // Pngの部分をBmpにするとエラー await formFile.CopyToAsync(ms); var byteArray = ms.ToArray(); SKBitmap bitmap = SKBitmap.Decode(byteArray); using (var ms2 = new MemoryStream()) { bitmap.Encode(ms2, SKEncodedImageFormat.Png, 100); using var fs = new FileStream(_environment.WebRootPath + "/Image/" + "5_" + testTable33.Id.ToString() + ".png", FileMode.Create); //同名ファイルがあると上書きされる await fs.WriteAsync(ms2.ToArray()); } } using (var ms = new MemoryStream()) { // IFormFile - MemoryStream - Byte[] - SKBitmap - SKCanvas - Encode(png) - FileStream // 500*500に切り抜き // Exif情報で回転 // Pngの部分をBmpにするとエラー await formFile.CopyToAsync(ms); var byteArray = ms.ToArray(); SKBitmap srcBitmap = SKBitmap.Decode(byteArray); int w = srcBitmap.Width; int h = srcBitmap.Height; SKRect src; if (w > h) { int tmp = (w - h) / 2; src = new SKRect(tmp, 0, tmp+h, h); // left, top, right, bottom } else if(w < h) { int tmp = (h - w) / 2; src = new SKRect(0, tmp, w, tmp + w); } else // w == h { src = new SKRect(0,0,w,h); } SKBitmap croppedBitmap = new SKBitmap(500, 500); SKCanvas canvas = new SKCanvas(croppedBitmap); // Exif Orientation switch (origin) { case SKEncodedOrigin.TopLeft: // 1 break; case SKEncodedOrigin.TopRight: // 2 canvas.Scale(-1, 1, 250, 250); break; case SKEncodedOrigin.BottomRight: // 3 canvas.RotateDegrees(180, 250, 250); break; case SKEncodedOrigin.BottomLeft: // 4 canvas.Scale(1, -1, 250, 250); break; case SKEncodedOrigin.LeftTop: // 5 canvas.RotateDegrees(90, 250, 250); canvas.Scale(1, -1, 250, 250); break; case SKEncodedOrigin.RightTop: // 6 canvas.RotateDegrees(90, 250, 250); break; case SKEncodedOrigin.RightBottom: // 7 canvas.RotateDegrees(90, 250, 250); canvas.Scale(-1, 1, 250, 250); break; case SKEncodedOrigin.LeftBottom: // 8 canvas.RotateDegrees(270, 250, 250); break; } SKRect dst = new SKRect(0, 0, 500, 500); canvas.DrawBitmap(srcBitmap, src, dst); using var fs = new FileStream(_environment.WebRootPath + "/Image/" + "6_" + testTable33.Id.ToString() + ".png", FileMode.Create); //同名ファイルがあると上書きされる croppedBitmap.Encode(fs, SKEncodedImageFormat.Png, 100); // SKBitmapの場合StreamをTargetにできる } } |