///
<param name="name">
文件名
</param>
///
<returns>
返回小写后缀,不带“.”
</returns>
public
static
string
GetFileExt(
string
name)
return
name.Split(
"
.
"
).Last().ToLower();
///
<summary>
///
是否为图片文件
///
</summary>
///
<param name="fileExt">
文件扩展名,不含“.”
</param>
public
static
bool
IsImage(
string
fileExt)
ArrayList al
=
new
ArrayList {
"
bmp
"
,
"
jpeg
"
,
"
jpg
"
,
"
gif
"
,
"
png
"
,
"
ico
"
};
return
al.Contains(fileExt);
///
<summary>
///
检查是否允许文件
///
</summary>
///
<param name="fileExt">
文件后缀
</param>
///
<param name="allowExt">
允许文件数组
</param>
public
static
bool
CheckFileExt(
string
fileExt,
string
[] allowExt)
return
allowExt.Any(t => t ==
fileExt);
///
<summary>
///
制作缩略图
///
</summary>
///
<param name="original">
图片对象
</param>
///
<param name="newFileName">
新图路径
</param>
///
<param name="maxWidth">
最大宽度
</param>
///
<param name="maxHeight">
最大高度
</param>
public
static
void
ThumbImg(Image original,
string
newFileName,
int
maxWidth,
int
maxHeight)
Size newSize
=
ResizeImage(original.Width, original.Height, maxWidth, maxHeight);
using
(Image displayImage =
new
Bitmap(original, newSize))
displayImage.Save(newFileName, original.RawFormat);
finally
original.Dispose();
///
<summary>
///
制作缩略图
///
</summary>
///
<param name="fileName">
文件名
</param>
///
<param name="newFileName">
新图路径
</param>
///
<param name="maxWidth">
最大宽度
</param>
///
<param name="maxHeight">
最大高度
</param>
public
static
void
ThumbImg(
string
fileName,
string
newFileName,
int
maxWidth,
int
maxHeight)
byte
[] imageBytes =
File.ReadAllBytes(fileName);
Image img
= Image.FromStream(
new
MemoryStream(imageBytes));
ThumbImg(img, newFileName, maxWidth, maxHeight);
///
<summary>
///
计算新尺寸
///
</summary>
///
<param name="width">
原始宽度
</param>
///
<param name="height">
原始高度
</param>
///
<param name="maxWidth">
最大新宽度
</param>
///
<param name="maxHeight">
最大新高度
</param>
///
<returns></returns>
private
static
Size ResizeImage(
int
width,
int
height,
int
maxWidth,
int
maxHeight)
if
(maxWidth <=
0
)
maxWidth
=
width;
if
(maxHeight <=
0
)
maxHeight
=
height;
decimal
MAX_WIDTH =
maxWidth;
decimal
MAX_HEIGHT =
maxHeight;
decimal
ASPECT_RATIO = MAX_WIDTH /
MAX_HEIGHT;
int
newWidth, newHeight;
decimal
originalWidth =
width;
decimal
originalHeight =
height;
if
(originalWidth > MAX_WIDTH || originalHeight >
MAX_HEIGHT)
decimal
factor;
if
(originalWidth / originalHeight >
ASPECT_RATIO)
factor
= originalWidth /
MAX_WIDTH;
newWidth
= Convert.ToInt32(originalWidth /
factor);
newHeight
= Convert.ToInt32(originalHeight /
factor);
factor
= originalHeight /
MAX_HEIGHT;
newWidth
= Convert.ToInt32(originalWidth /
factor);
newHeight
= Convert.ToInt32(originalHeight /
factor);
newWidth
=
width;
newHeight
=
height;
return
new
Size(newWidth, newHeight);
///
<summary>
///
得到图片格式
///
</summary>
///
<param name="name">
文件名称
</param>
///
<returns></returns>
public
static
ImageFormat GetFormat(
string
name)
string
ext =
GetFileExt(name);
switch
(ext)
case
"
ico
"
:
return
ImageFormat.Icon;
case
"
bmp
"
:
return
ImageFormat.Bmp;
case
"
png
"
:
return
ImageFormat.Png;
case
"
gif
"
:
return
ImageFormat.Gif;
default
:
return
ImageFormat.Jpeg;
2019-05-09 10:27:01,330 线程ID:[80] 日志级别:ERROR 出错类:WebApp.HttpGlobalExceptionFilter property:[(null)] - 错误描述:System.TypeInitializationException: The type initializer for 'System.DrawingCore.GDIPlus' threw an exception. ---> System.DllNotFoundException: Unable to load shared library 'gdiplus' or one of its dependencies. In order to help diagnose loading problems, consider setting the LD_DEBUG environment variable: libgdiplus: cannot open shared object file: No such file or directory
at System.DrawingCore.GDIPlus.GdiplusStartup(UInt64& token, GdiplusStartupInput& input, GdiplusStartupOutput& output)
at System.DrawingCore.GDIPlus..cctor()
--- End of inner exception stack trace ---
at System.DrawingCore.GDIPlus.GdipGetGenericFontFamilySansSerif(IntPtr& fontFamily)
at System.DrawingCore.FontFamily..ctor(GenericFontFamilies genericFamily)
at System.DrawingCore.FontFamily.get_GenericSansSerif()
at System.DrawingCore.Font.CreateFont(String familyName, Single emSize, FontStyle style, GraphicsUnit unit, Byte charSet, Boolean isVertical)
at Common.VerifyCodeHelper.CreateByteByImgVerifyCode(String verifyCode, Int32 width, Int32 height) in F:\src\WebApp\Common\VerifyCodeHelper.cs:line 206
at WebApp.Controllers.VerifyCodeController.NumberVerifyCode() in F:\src\WebApp\Controllers\VerifyCodeController.cs:line 27
at lambda_method(Closure , Object , Object[] )
at Microsoft.Extensions.Internal.ObjectMethodExecutor.Execute(Object target, Object[] parameters)
at Microsoft.AspNetCore.Mvc.Internal.ActionMethodExecutor.SyncActionResultExecutor.Execute(IActionResultTypeMapper mapper, ObjectMethodExecutor executor, Object controller, Object[] arguments)
at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeActionMethodAsync()
at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeNextActionFilterAsync()
at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Rethrow(ActionExecutedContext context)
at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.Next(State& next, Scope& scope, Object& state, Boolean& isCompleted)
at Microsoft.AspNetCore.Mvc.Internal.ControllerActionInvoker.InvokeInnerFilterAsync()
at Microsoft.AspNetCore.Mvc.Internal.ResourceInvoker.InvokeNextExceptionFilterAsync()
Centos 7
yum install libgdiplus-devel