Ejemplo n.º 1
0
        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);
            }
        }
Ejemplo n.º 2
0
        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
                    }));
                }
            }
        }