コード例 #1
0
        private static byte[] UpdatePoliticianImages(string politicianKey,
                                                     Stream imageStream, DateTime uploadTime, bool includeAllProfileImages,
                                                     bool includeHeadshotOriginal, bool includeHeadshotResizedImages,
                                                     bool checkForDuplicates, out Size originalSize, out byte[] originalBlob)
        {
            var memoryStream = new MemoryStream();

            imageStream.Position = 0;
            imageStream.CopyTo(memoryStream);
            imageStream.Position = 0;
            var image = Image.FromStream(imageStream);

            originalSize = image.Size;
            var blob = memoryStream.ToArray();

            if (!image.RawFormat.Equals(ImageFormat.Jpeg)) // could be transparent
            {
                // draw on a white background
                var b = new Bitmap(image.Width, image.Height);
                b.SetResolution(image.HorizontalResolution, image.VerticalResolution);
                using (var g = Graphics.FromImage(b))
                {
                    g.Clear(Color.White);
                    g.DrawImageUnscaled(image, 0, 0);
                    //b.Save(@"c:\temp\zz.jpg", System.Drawing.Imaging.ImageFormat.Jpeg);
                }
                image = b;
            }

            // This is so all subsequent db operations can be updates
            PoliticiansImagesData.GuaranteePoliticianKeyExists(politicianKey);
            PoliticiansImagesBlobs.GuaranteePoliticianKeyExists(politicianKey);

            originalBlob = null;
            if (checkForDuplicates)
            {
                // We fetch this image to see if its a duplicate
                var duplicateTester = GetImageToUseForDuplicateTesting();
                if (duplicateTester != null)
                {
                    var duplicateTesterBlob = GetResizedImageBlobAsJpg(image,
                                                                       duplicateTester.MaxWidth, duplicateTester.MaxHeight);
                    originalBlob = duplicateTesterBlob;
                    var dbBlob =
                        PoliticiansImagesBlobs.GetColumn(duplicateTester.BlobsColumn,
                                                         politicianKey) as Byte[];
                    if (dbBlob != null && dbBlob.Length == duplicateTesterBlob.Length)
                    {
                        var isDuplicate =
                            !dbBlob.Where((t, inx) => t != duplicateTesterBlob[inx])
                            .Any();
                        if (isDuplicate)
                        {
                            return(null); // signals duplicate
                        }
                    }
                }
            }

            if (includeAllProfileImages)
            {
                PoliticiansImagesData.UpdateProfileOriginalDate(uploadTime, politicianKey);
                //PoliticiansImagesBlobs.UpdateProfileOriginal(blob, politicianKey);

                foreach (var info in GetAllProfilePoliticianImageInfos())
                {
                    var resizedBlob = GetResizedImageBlobAsJpg(image, info.MaxWidth,
                                                               info.MaxHeight);
                    PoliticiansImagesBlobs.UpdateColumn(info.BlobsColumn, resizedBlob,
                                                        politicianKey);
                }
            }

            if (includeHeadshotOriginal)
            {
                PoliticiansImagesData.UpdateHeadshotDate(uploadTime, politicianKey);
            }

            if (includeHeadshotResizedImages)
            {
                foreach (var info in GetResizedHeadshotPoliticianImageInfos())
                {
                    var resizedBlob = GetResizedImageBlobAsJpg(image, info.MaxWidth,
                                                               info.MaxHeight);
                    PoliticiansImagesBlobs.UpdateColumn(info.BlobsColumn, resizedBlob,
                                                        politicianKey);
                }
                PoliticiansImagesData.UpdateHeadshotResizeDate(uploadTime, politicianKey);
            }

            // Don't do this here. It belongs as a separate call.
            //CommonCacheInvalidation.ScheduleInvalidation("politicianimage", politicianKey);

            // We return the blob for logging purposes
            return(blob);
        }
コード例 #2
0
        internal static byte[] GetPoliticianImage(string politicianKey,
                                                  string columnName, string defaultColumnName, bool noCache)
        {
            byte[] blob;

            if (noCache)
            {
                // Validate the columnName and get the column enum from the columnName
                PoliticiansImagesBlobs.Column column;

                if (columnName == null ||
                    !PoliticiansImagesBlobs.TryGetColumn(columnName, out column))
                {
                    return(null);
                }

                // The following will be null if the politicianKey is bad, if the image doesn't
                // exist, or if a valid but non-image column name was passed
                blob = PoliticiansImagesBlobs.GetColumn(column, politicianKey) as byte[];

                // Optional recursive call to return the appropriate NoPhoto image if
                // the requested image not found
                if (!string.IsNullOrWhiteSpace(defaultColumnName) && blob == null)
                {
                    // if the defaultColumnName is invalid, use the original column
                    if (!PoliticiansImagesBlobs.TryGetColumn(defaultColumnName, out column))
                    {
                        defaultColumnName = columnName;
                    }
                    blob = GetPoliticianImage("NoPhoto", defaultColumnName, null, true);
                }
            }
            else // normal caching
            {
                // Validate the columnName and get the column enum from the columnName
                DB.VoteImagesLocal.PoliticiansImagesBlobs.Column column;
                if (columnName == null ||
                    !DB.VoteImagesLocal.PoliticiansImagesBlobs.TryGetColumn(columnName,
                                                                            out column))
                {
                    return(null);
                }

                // The following will be null if the politicianKey is bad, if the image doesn't
                // exist, or if a valid but non-image column name was passed
                blob =
                    DB.VoteImagesLocal.PoliticiansImagesBlobs.GetColumn(column, politicianKey)
                    as byte[];

                // Optional recursive call to return the appropriate NoPhoto image if
                // the requested image not found
                if (!string.IsNullOrWhiteSpace(defaultColumnName) && blob == null)
                {
                    // make sure the NoPhoto image has been cached
                    if (
                        !DB.VoteImagesLocal.PoliticiansImagesData.PoliticianKeyExists("NoPhoto"))
                    {
                        CopyCommonDataToLocal("NoPhoto");
                    }
                    // if the defaultColumnName is invalid, use the original column
                    if (
                        !DB.VoteImagesLocal.PoliticiansImagesBlobs.TryGetColumn(
                            defaultColumnName, out column))
                    {
                        defaultColumnName = columnName;
                    }
                    blob = GetPoliticianImage("NoPhoto", defaultColumnName, null, false);
                }
            }

            return(blob);
        }