private static void CropImage(ImageCustomization imageCustomization, IMagickImage magickImage) { var cropWidth = Math.Abs(imageCustomization.X2 - imageCustomization.X1); var cropHeight = Math.Abs(imageCustomization.Y2 - imageCustomization.Y1); if ((cropWidth <= 0 || cropHeight <= 0) || cropWidth == magickImage.BaseWidth && cropHeight == magickImage.BaseHeight) { return; } else { var magickGeometry = new MagickGeometry(cropWidth, cropHeight) { IgnoreAspectRatio = false, //保持长宽比 FillArea = false, X = imageCustomization.X1, Y = imageCustomization.Y1 }; magickImage.Crop(magickGeometry); } }
public async Task <Result <MongoDBImageSaveOutput> > SaveImageToMongoDBAsync(string hostName, ContentBasedImageSaveInput contentBasedImageInput) { var hostConfig = _mongoDBHostConfigs.FirstOrDefault(x => x.HostName.Equals(hostName, StringComparison.OrdinalIgnoreCase)); if (hostConfig == null) { return(Result.FromError <MongoDBImageSaveOutput>($"HostName:{hostName}无可匹配的HostConfig项")); } else { var imageInfo = new MagickImageInfo(contentBasedImageInput.ImageBytes); var imageCustomization = new ImageCustomization { X1 = contentBasedImageInput.X1 ?? 0, X2 = contentBasedImageInput.X2 ?? imageInfo.Width, Y1 = contentBasedImageInput.Y1 ?? 0, Y2 = contentBasedImageInput.Y2 ?? imageInfo.Height }; imageCustomization.ComputeHash(); var contentHash = contentBasedImageInput.Base64String.ToMD5HashString(); var imageMetadata = await _imageMetadataRepository.GetByContentHashAsync(contentHash); if (imageMetadata != null && imageMetadata.Customizations.Any(x => x.Hash == imageCustomization.Hash)) { var imageSaveOutput = new MongoDBImageSaveOutput { Id = imageMetadata.Id, ContentHash = contentHash, MetaHash = imageCustomization.Hash }; return(Result.FromError(imageSaveOutput, "已经存在该图片信息,请勿重复提交")); } else if (imageMetadata != null)//只保存原数据信息即可 { imageMetadata.Customizations.Add(imageCustomization); await _imageMetadataRepository.UpdateAsync(imageMetadata); var imageSaveOutput = new MongoDBImageSaveOutput { Id = imageMetadata.Id, ContentHash = contentHash, MetaHash = imageCustomization.Hash }; return(Result.FromData(imageSaveOutput)); } else//需要同时保存图片信息与原数据信息 { var gridFSBucket = GetGridFSBucket(hostConfig); var fileId = await gridFSBucket.UploadFromBytesAsync(contentBasedImageInput.Title, contentBasedImageInput.ImageBytes); imageMetadata = new ImageMetadata { Id = fileId, ContentHash = contentHash, Title = contentBasedImageInput.Title, Description = contentBasedImageInput.Description, Customizations = new List <ImageCustomization>() }; imageMetadata.Customizations.Add(imageCustomization); await _imageMetadataRepository.InsertAsync(imageMetadata); return(Result.FromData(new MongoDBImageSaveOutput { Id = fileId, ContentHash = contentHash, MetaHash = imageCustomization.Hash })); } } }