コード例 #1
0
        public void CreatePostWithImageTest()
        {
            TransitPost t_post = new TransitPost();

            t_post.Body    = Guid.NewGuid().ToString();
            t_post.Title   = Guid.NewGuid().ToString();
            t_post.Publish = true;
            t_post.Id      = Blog.CreateOrUpdatePost(Ticket, t_post);
            Assert.Greater(t_post.Id, 0);

            TransitImage t_image = new TransitImage();

            t_image.Name = Guid.NewGuid().ToString();

            Bitmap   b = new Bitmap(480, 480);
            Graphics g = Graphics.FromImage(b);

            g.FillEllipse(Brushes.Red, 0, 0, 480, 480);
            ThumbnailBitmap tb = new ThumbnailBitmap(b);

            t_image.Data      = tb.Bitmap;
            t_image.Thumbnail = tb.Thumbnail;

            t_image.Id = Blog.CreateOrUpdatePostImage(Ticket, t_post.Id, t_image);
            Assert.Greater(t_image.Id, 0);

            Blog.DeletePost(Ticket, t_post.Id);
        }
コード例 #2
0
        public void TestLoadInvalid()
        {
            MemoryStream    s = new MemoryStream();
            ThumbnailBitmap b = new ThumbnailBitmap(s);

            Console.WriteLine("Size: {0}x{1}", b.FullSize.Width, b.FullSize.Height);
        }
コード例 #3
0
        public void TestResizeTransparentGIF89()
        {
            Stream sm = Assembly.GetExecutingAssembly().GetManifestResourceStream("SnCore.Tools.Tests.Images.transparent.gif");
            // load original image in decoder
            GifDecoder originaldecoder = new GifDecoder();

            originaldecoder.Read(sm);
            sm.Seek(0, SeekOrigin.Begin);
            GifDecoder.GifFrame frame = originaldecoder.GetFrame(0);
            Console.WriteLine("Transparency: {0} - {1}", frame.transparency, Color.FromArgb(frame.bgcolor));
            // load in ThumnailBitmap
            Assert.IsNotNull(sm);
            ThumbnailBitmap b = new ThumbnailBitmap(sm);

            Console.WriteLine("Size: {0}x{1}", b.FullSize.Width, b.FullSize.Height);
            // Assert.AreEqual(b.FullSize, new Size(227, 227));
            Assert.IsNotNull(b.Thumbnail);
            Assert.IsNotNull(b.Bitmap);
            // reload in decoder, verify transparency
            GifDecoder decoder = new GifDecoder();

            decoder.Read(new MemoryStream(b.Bitmap));
            frame = decoder.GetFrame(0);
            Console.WriteLine("Transparency: {0} - {1}", frame.transparency, Color.FromArgb(frame.bgcolor));
            //FileStream f = File.Create("C:\\temp\\chefout.gif");
            //f.Write(b.Bitmap, 0, b.Bitmap.Length);
            //f.Close();
            //f = File.Create("C:\\temp\\chefthumbnail.gif");
            //f.Write(b.Thumbnail, 0, b.Thumbnail.Length);
            //f.Close();
        }
コード例 #4
0
        public void AtomNewImageTest()
        {
            HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create("http://localhost/DBlog/AtomImage.aspx");

            request.Method      = "POST";
            request.ContentType = "image/jpg";
            string usernamePassword   = string.Format("Administrator:");
            string basicAuthorization = string.Format("Basic {0}", Convert.ToBase64String(
                                                          Encoding.ASCII.GetBytes(usernamePassword)));

            request.Headers.Add("Authorization", basicAuthorization);
            byte[] postData = ThumbnailBitmap.GetBitmapDataFromText("x", 72, 100, 150);
            request.ContentLength = postData.Length;
            request.GetRequestStream().Write(postData, 0, postData.Length);
            request.GetRequestStream().Close();
            HttpWebResponse response         = (HttpWebResponse)request.GetResponse();
            string          responseLocation = response.Headers["Location"];

            Assert.IsNotEmpty(responseLocation);
            Console.WriteLine(responseLocation);
            // atom entry returned
            AtomEntry atomEntry = new AtomEntry();

            atomEntry.Load(response.GetResponseStream());
            Console.WriteLine(atomEntry.Id.Uri);
            int id = int.Parse(atomEntry.Id.Uri.ToString().Substring(atomEntry.Id.Uri.ToString().LastIndexOf("/") + 1));

            Assert.IsTrue(id > 0);
            Console.WriteLine(string.Format("Id: {0}", id));
            Blog.DeleteImage(Ticket, id);
        }
コード例 #5
0
        public void AtomUpdateImageTest()
        {
            // create image
            TransitImage t_image = new TransitImage();

            t_image.Data = ThumbnailBitmap.GetBitmapDataFromText("x", 72, 100, 150);
            t_image.Name = Guid.NewGuid().ToString();
            t_image.Id   = Blog.CreateOrUpdateImage(Ticket, t_image);
            // update image
            HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(
                string.Format("http://localhost/DBlog/AtomImage.aspx?id={0}", t_image.Id));

            request.Method      = "PUT";
            request.ContentType = "image/jpg";
            string usernamePassword   = string.Format("Administrator:");
            string basicAuthorization = string.Format("Basic {0}", Convert.ToBase64String(
                                                          Encoding.ASCII.GetBytes(usernamePassword)));

            request.Headers.Add("Authorization", basicAuthorization);
            request.ContentLength = t_image.Data.Length;
            request.GetRequestStream().Write(t_image.Data, 0, t_image.Data.Length);
            request.GetRequestStream().Close();
            HttpWebResponse response = (HttpWebResponse)request.GetResponse();

            Assert.IsTrue(response.StatusCode == HttpStatusCode.OK, string.Format("Response code was {0}", response.StatusCode));
            Blog.DeleteImage(Ticket, t_image.Id);
        }
コード例 #6
0
        public void UpdateThumbnail()
        {
            WebsiteBitmap bitmap = new WebsiteBitmap();

            mInstance.Bitmap   = ThumbnailBitmap.GetBitmap(bitmap.GetBitmapFromWeb(mInstance.Url));
            mInstance.Modified = DateTime.UtcNow;
            Session.Save(mInstance);
        }
コード例 #7
0
ファイル: ManagedPicture.cs プロジェクト: qwdf1615/sncore
 public override void SetInstance(Picture value)
 {
     Name        = value.Name;
     Description = value.Description;
     Created     = value.Created;
     Modified    = value.Modified;
     Type        = value.Type.Name;
     Bitmap      = value.Bitmap;
     Thumbnail   = new ThumbnailBitmap(value.Bitmap).Thumbnail;
     base.SetInstance(value);
 }
コード例 #8
0
 public override void SetInstance(AccountPicture instance)
 {
     base.SetInstance(instance);
     Name        = instance.Name;
     Description = instance.Description;
     Created     = instance.Created;
     Modified    = instance.Modified;
     AccountId   = instance.Account.Id;
     Hidden      = instance.Hidden;
     Bitmap      = instance.Bitmap;
     Thumbnail   = new ThumbnailBitmap(Bitmap).Thumbnail;
     Position    = instance.Position;
 }
コード例 #9
0
 public override void SetInstance(AccountEventPicture instance)
 {
     base.SetInstance(instance);
     AccountEventId = instance.AccountEvent.Id;
     HasPicture     = (instance.Picture != null);
     Picture        = instance.Picture;
     Thumbnail      = new ThumbnailBitmap(instance.Picture).Thumbnail;
     Name           = instance.Name;
     Description    = instance.Description;
     AccountId      = instance.Account.Id;
     AccountName    = instance.Account.Name;
     Created        = instance.Created;
     Modified       = instance.Modified;
     Position       = instance.Position;
 }
コード例 #10
0
        public void TestTooSmallGIF89()
        {
            Stream sm = Assembly.GetExecutingAssembly().GetManifestResourceStream("SnCore.Tools.Tests.Images.small.gif");
            // load original image in decoder
            GifDecoder originaldecoder = new GifDecoder();

            originaldecoder.Read(sm);
            sm.Seek(0, SeekOrigin.Begin);
            GifDecoder.GifFrame frame = originaldecoder.GetFrame(0);
            Console.WriteLine("Transparency: {0} - {1}", frame.transparency, Color.FromArgb(frame.bgcolor));
            // load in ThumnailBitmap
            Assert.IsNotNull(sm);
            ThumbnailBitmap b = new ThumbnailBitmap(sm);

            Console.WriteLine("Size: {0}x{1}", b.FullSize.Width, b.FullSize.Height);
        }
コード例 #11
0
        public void CreateAnimatedGIFTest()
        {
            MemoryStream       ms      = new MemoryStream();
            AnimatedGifEncoder encoder = new AnimatedGifEncoder();

            // encoder.SetDelay(200);
            encoder.SetFrameRate(5);
            encoder.Start(ms);
            for (char i = 'a'; i <= 'z'; i++)
            {
                Console.Write(i.ToString());
                encoder.AddFrame(ThumbnailBitmap.GetBitmapFromText(i.ToString(), 48, 100, 200));
            }
            encoder.Finish();
            Console.WriteLine();
        }
コード例 #12
0
        public void ResizeAnimatedGIFTest()
        {
            string filename = Path.GetTempFileName();

            Console.WriteLine("Creating: {0}", filename);
            string resizedfilename = Path.GetTempFileName();

            Console.WriteLine("Resizing: {0}", resizedfilename);
            try
            {
                using (FileStream ms = File.OpenWrite(filename))
                {
                    AnimatedGifEncoder encoder = new AnimatedGifEncoder();
                    encoder.SetFrameRate(5);
                    encoder.Start(ms);
                    for (char i = 'a'; i <= 'e'; i++)
                    {
                        Console.Write(i.ToString());
                        encoder.AddFrame(ThumbnailBitmap.GetBitmapFromText(
                                             i.ToString(), 48, 300, 200));
                    }
                    Console.WriteLine();
                    encoder.Finish();
                    ms.Flush();
                }

                using (FileStream ms = File.OpenRead(filename))
                {
                    using (FileStream resizedms = File.OpenWrite(resizedfilename))
                    {
                        AnimatedGifEncoder.Resize(ms, resizedms, 200, 150, 100);
                        resizedms.Flush();
                    }
                }
            }
            finally
            {
                if (File.Exists(filename))
                {
                    File.Delete(filename);
                }
                if (File.Exists(resizedfilename))
                {
                    File.Delete(resizedfilename);
                }
            }
        }
コード例 #13
0
        public void TestLoadGIF89()
        {
            Stream sm = Assembly.GetExecutingAssembly().GetManifestResourceStream("SnCore.Tools.Tests.Images.test.gif");

            Assert.IsNotNull(sm);
            ThumbnailBitmap b = new ThumbnailBitmap(sm);

            Console.WriteLine("Size: {0}x{1}", b.FullSize.Width, b.FullSize.Height);
            Assert.AreEqual(new Size(592, 350), b.FullSize);
            Assert.IsNotNull(b.Thumbnail);
            Assert.IsNotNull(b.Bitmap);
            ThumbnailBitmap th = new ThumbnailBitmap(b.Thumbnail);

            Console.WriteLine("Size: {0}x{1}", th.FullSize.Width, th.FullSize.Height);
            // horizontal bitmap, thumbnail size assumes vertical, thumbnail adjusted to horizontal
            Assert.AreEqual(new Size(150, 100), th.FullSize);
        }
コード例 #14
0
    protected void files_FilesPosted(object sender, FilesPostedEventArgs e)
    {
        try
        {
            if (e.PostedFiles.Count == 0)
            {
                return;
            }

            ExceptionCollection exceptions = new ExceptionCollection();
            foreach (HttpPostedFile file in e.PostedFiles)
            {
                try
                {
                    TransitAccountPicture p = new TransitAccountPicture();

                    ThumbnailBitmap t = new ThumbnailBitmap(file.InputStream);
                    p.Bitmap      = t.Bitmap;
                    p.Name        = Path.GetFileName(file.FileName);
                    p.Description = string.Empty;
                    p.Hidden      = true;

                    int id = SessionManager.CreateOrUpdate <TransitAccountPicture>(
                        p, SessionManager.AccountService.CreateOrUpdateAccountPicture);

                    Size size = t.GetNewSize(new Size(200, 200));

                    inputBody.Content = string.Format("<a href=AccountPictureView.aspx?id={2}><img border=0 width={0} height={1} src=AccountPicture.aspx?id={2}></a>\n{3}",
                                                      size.Width, size.Height, id, inputBody.Content);
                }
                catch (Exception ex)
                {
                    exceptions.Add(new Exception(string.Format("Error processing {0}: {1}",
                                                               Renderer.Render(file.FileName), ex.Message), ex));
                }

                exceptions.Throw();
            }
        }
        catch (Exception ex)
        {
            ReportException(ex);
        }
    }
コード例 #15
0
        public void TestLoadAll()
        {
            string[] images = Assembly.GetExecutingAssembly().GetManifestResourceNames();
            foreach (string image in images)
            {
                if (!image.StartsWith("SnCore.Tools.Tests.Images."))
                {
                    continue;
                }

                Console.WriteLine(image);

                Stream sm = Assembly.GetExecutingAssembly().GetManifestResourceStream(image);
                Assert.IsNotNull(sm);
                ThumbnailBitmap b = new ThumbnailBitmap(sm, new Size(1, 1), ThumbnailBitmap.s_FullSize, ThumbnailBitmap.s_ThumbnailSize);
                Console.WriteLine("Size: {0}x{1}", b.FullSize.Width, b.FullSize.Height);
                Assert.IsNotNull(b.Bitmap);
            }
        }
コード例 #16
0
    protected void files_FilesPosted(object sender, FilesPostedEventArgs e)
    {
        try
        {
            if (e.PostedFiles.Count == 0)
            {
                return;
            }

            ExceptionCollection exceptions = new ExceptionCollection();
            foreach (HttpPostedFile file in e.PostedFiles)
            {
                try
                {
                    TransitAccountEventPicture p = new TransitAccountEventPicture();
                    ThumbnailBitmap            t = new ThumbnailBitmap(file.InputStream);
                    p.Picture        = t.Bitmap;
                    p.Name           = Path.GetFileName(file.FileName);
                    p.Description    = string.Empty;
                    p.AccountEventId = RequestId;
                    SessionManager.CreateOrUpdate <TransitAccountEventPicture>(
                        p, SessionManager.EventService.CreateOrUpdateAccountEventPicture);
                }
                catch (Exception ex)
                {
                    exceptions.Add(new Exception(string.Format("Error processing {0}: {1}",
                                                               Renderer.Render(file.FileName), ex.Message), ex));
                }
            }

            gridManage.CurrentPageIndex = 0;
            gridManage_OnGetDataSource(sender, e);
            gridManage.DataBind();
            exceptions.Throw();

            Redirect(string.Format("AccountEventView.aspx?id={0}", RequestId));
        }
        catch (Exception ex)
        {
            ReportException(ex);
        }
    }
コード例 #17
0
        public void CreatePostWithImageAndCommentTest()
        {
            // post
            TransitPost t_post = new TransitPost();

            t_post.Body    = Guid.NewGuid().ToString();
            t_post.Title   = Guid.NewGuid().ToString();
            t_post.Publish = true;
            t_post.Id      = Blog.CreateOrUpdatePost(Ticket, t_post);
            Assert.Greater(t_post.Id, 0);

            // image
            TransitImage t_image = new TransitImage();

            t_image.Name = Guid.NewGuid().ToString();

            Bitmap   b = new Bitmap(480, 480);
            Graphics g = Graphics.FromImage(b);

            g.FillEllipse(Brushes.Red, 0, 0, 480, 480);
            ThumbnailBitmap tb = new ThumbnailBitmap(b);

            t_image.Data      = tb.Bitmap;
            t_image.Thumbnail = tb.Thumbnail;

            t_image.Id = Blog.CreateOrUpdatePostImage(Ticket, t_post.Id, t_image);
            Assert.Greater(t_image.Id, 0);

            // comment
            TransitComment t_comment = new TransitComment();

            t_comment.IpAddress = "127.0.0.1";
            t_comment.LoginId   = Blog.GetLogin(Ticket).Id;
            t_comment.Text      = Guid.NewGuid().ToString();

            t_comment.Id = Blog.CreateOrUpdateImageComment(Ticket, t_image.Id, t_comment);
            Assert.Greater(t_comment.Id, 0);

            Blog.DeleteImage(Ticket, t_image.Id);
            Blog.DeletePost(Ticket, t_post.Id);
        }
コード例 #18
0
    protected void files_FilesPosted(object sender, FilesPostedEventArgs e)
    {
        try
        {
            if (e.PostedFiles.Count == 0)
            {
                return;
            }

            ExceptionCollection exceptions = new ExceptionCollection();
            foreach (HttpPostedFile file in e.PostedFiles)
            {
                try
                {
                    TransitAccountPicture p = new TransitAccountPicture();

                    ThumbnailBitmap t = new ThumbnailBitmap(file.InputStream);
                    p.Bitmap      = t.Bitmap;
                    p.Name        = Path.GetFileName(file.FileName);
                    p.Description = string.Empty;
                    p.Hidden      = false;

                    SessionManager.CreateOrUpdate <TransitAccountPicture>(
                        p, SessionManager.AccountService.CreateOrUpdateAccountPicture);
                }
                catch (Exception ex)
                {
                    exceptions.Add(new Exception(string.Format("Error processing {0}: {1}",
                                                               Renderer.Render(file.FileName), ex.Message), ex));
                }
            }

            GetData(sender, e);
            exceptions.Throw();
        }
        catch (Exception ex)
        {
            ReportException(ex);
        }
    }
コード例 #19
0
        public void TestLoadGIF89a()
        {
            GifDecoder a_decoder = new GifDecoder();
            Stream     sm        = Assembly.GetExecutingAssembly().GetManifestResourceStream("SnCore.Tools.Tests.Images.animated.gif");

            Console.WriteLine("Bytes: {0}", sm.Length);
            a_decoder.Read(sm);
            Console.WriteLine("Frames: {0}", a_decoder.GetFrameCount());

            sm.Seek(0, SeekOrigin.Begin);
            Assert.IsNotNull(sm);
            ThumbnailBitmap b = new ThumbnailBitmap(sm);

            Console.WriteLine("Size: {0}x{1}", b.FullSize.Width, b.FullSize.Height);
            Assert.AreEqual(new Size(320, 240), b.FullSize);
            Assert.IsNotNull(b.Thumbnail);
            Assert.IsNotNull(b.Bitmap);
            ThumbnailBitmap th = new ThumbnailBitmap(b.Thumbnail);

            Console.WriteLine("Size: {0}x{1}", th.FullSize.Width, th.FullSize.Height);
            Assert.AreEqual(new Size(150, 100), th.FullSize);

            // make sure that the bitmap is still animated
            Console.WriteLine("Bytes: {0}", b.Bitmap.Length);
            GifDecoder decoder = new GifDecoder();

            decoder.Read(new MemoryStream(b.Bitmap));
            Console.WriteLine("Frames: {0}", decoder.GetFrameCount());

            GifDecoder th_decoder = new GifDecoder();

            Console.WriteLine("Bytes: {0}", b.Thumbnail.Length);
            th_decoder.Read(new MemoryStream(b.Thumbnail));
            Console.WriteLine("Frames: {0}", th_decoder.GetFrameCount());
            Assert.AreEqual(th_decoder.GetFrameCount(), decoder.GetFrameCount());
        }
コード例 #20
0
        public void ConsumeAnimatedGIFTest()
        {
            MemoryStream       ms      = new MemoryStream();
            AnimatedGifEncoder encoder = new AnimatedGifEncoder();

            // encoder.SetDelay(200);
            encoder.SetFrameRate(5);
            encoder.Start(ms);
            for (char i = 'a'; i <= 'z'; i++)
            {
                Console.Write(i.ToString());
                encoder.AddFrame(ThumbnailBitmap.GetBitmapFromText(i.ToString(), 48, 100, 200));
            }
            Console.WriteLine();
            encoder.Finish();
            ms.Flush();
            ms.Seek(0, SeekOrigin.Begin);

            GifDecoder decoder = new GifDecoder();

            decoder.Read(ms);
            Console.WriteLine("Frames: {0}", decoder.GetFrameCount());
            Assert.AreEqual(26, decoder.GetFrameCount());
        }
コード例 #21
0
    public override PicturePage.TransitPicture GetRandomPictureWithThumbnail()
    {
        SnCore.Services.TransitPicture p = SessionManager.GetInstance <SnCore.Services.TransitPicture, string>(
            "AccountWebsite", SessionManager.ObjectService.GetRandomPictureByType);

        if (p == null || p.Bitmap == null)
        {
            p = new SnCore.Services.TransitPicture();
            const string s_Unavailable = "Thumbnail\nQueued";
            // flip the bitmaps horizontally
            p.Bitmap    = ThumbnailBitmap.GetBitmapDataFromText(s_Unavailable, 10, ThumbnailBitmap.s_FullSize.Height, ThumbnailBitmap.s_FullSize.Width);
            p.Thumbnail = ThumbnailBitmap.GetBitmapDataFromText(s_Unavailable, 10, ThumbnailBitmap.s_ThumbnailSize.Height, ThumbnailBitmap.s_ThumbnailSize.Width);
            p.Created   = p.Modified = DateTime.UtcNow;
        }

        TransitPicture result = new TransitPicture();

        result.Id       = p.Id;
        result.Bitmap   = p.Thumbnail;
        result.Created  = p.Created;
        result.Modified = p.Modified;
        result.Name     = p.Name;
        return(result);
    }
コード例 #22
0
        public void ResizeToThumbnailTest()
        {
            string filename = Path.GetTempFileName();

            Console.WriteLine("Creating: {0}", filename);
            try
            {
                MemoryStream       ms      = new MemoryStream();
                AnimatedGifEncoder encoder = new AnimatedGifEncoder();
                encoder.SetFrameRate(5);
                encoder.Start(ms);
                for (char i = 'a'; i <= 'e'; i++)
                {
                    Console.Write(i.ToString());
                    encoder.AddFrame(ThumbnailBitmap.GetBitmapFromText(
                                         i.ToString(), 48, 300, 200));
                }
                Console.WriteLine();
                encoder.Finish();
                ms.Flush();
                ms.Seek(0, SeekOrigin.Begin);

                ThumbnailBitmap bitmap = new ThumbnailBitmap(ms);
                FileStream      fs     = File.Create(filename);
                byte[]          th     = bitmap.Thumbnail;
                fs.Write(th, 0, th.Length);
                fs.Close();
            }
            finally
            {
                if (File.Exists(filename))
                {
                    File.Delete(filename);
                }
            }
        }
コード例 #23
0
    public void save_Click(object sender, EventArgs e)
    {
        try
        {
            Post.Title = CheckInput("Title", inputTitle.Text);

            List <TransitTopic> topics = new List <TransitTopic>();
            foreach (ListItem topic in inputTopic.Items)
            {
                if (topic.Selected)
                {
                    TransitTopic t_topic = new TransitTopic();
                    t_topic.Name = topic.Text;
                    t_topic.Id   = int.Parse(topic.Value);
                    topics.Add(t_topic);
                }
            }
            Post.Topics = topics.ToArray();

            Post.Body    = inputBody.Content;
            Post.Publish = inputPublish.Checked;
            Post.Display = inputDisplay.Checked;
            Post.Sticky  = inputSticky.Checked;
            Post.Export  = inputExport.Checked;
            Post.Created = SessionManager.ToUTC(inputCreatedDate.SelectedDate.Add(
                                                    inputCreatedTime.SelectedTime));
            Post.Id = PostId = SessionManager.BlogService.CreateOrUpdatePost(
                SessionManager.Ticket, Post);

            if (!string.IsNullOrEmpty(inputServerPath.Text))
            {
                string fullpath = Path.Combine(
                    SessionManager.GetSetting("Images", string.Empty),
                    inputServerPath.Text);

                ArrayList filenames = new ArrayList();
                filenames.AddRange(Directory.GetFiles(fullpath, "*.jpg"));
                filenames.AddRange(Directory.GetFiles(fullpath, "*.gif"));

                List <TransitPostImage> deleted = SessionManager.GetCachedCollection <TransitPostImage>(
                    "GetPostImages", SessionManager.Ticket, new TransitPostImageQueryOptions(Post.Id));

                List <TransitPostImage> updated = new List <TransitPostImage>();

                foreach (string filename in filenames)
                {
                    TransitImage image = new TransitImage();
                    image.Name = Path.GetFileName(filename);
                    image.Path = inputServerPath.Text;

                    for (int i = 0; i < deleted.Count; i++)
                    {
                        if (deleted[i].Image.Name == image.Name)
                        {
                            image = deleted[i].Image;
                            deleted.RemoveAt(i);
                            break;
                        }
                    }

                    ThumbnailBitmap bitmap = new ThumbnailBitmap(filename);
                    image.Thumbnail = bitmap.Thumbnail;

                    SessionManager.BlogService.CreateOrUpdatePostImage(
                        SessionManager.Ticket, PostId, image);
                }

                foreach (TransitPostImage dimage in deleted)
                {
                    SessionManager.BlogService.DeletePostImage(
                        SessionManager.Ticket, dimage.Id);
                }

                SessionManager.Invalidate <TransitPostImage>();

                images.Visible = true;
                GetDataImages(sender, e);
            }

            if (!string.IsNullOrEmpty(inputLogin.Text))
            {
                loginAdd_Click(sender, e);
            }

            SessionManager.Invalidate <TransitPost>();
            ReportInfo("Post Saved");
        }
        catch (Exception ex)
        {
            ReportException(ex);
        }
    }
コード例 #24
0
ファイル: ManagedAccountFeed.cs プロジェクト: qwdf1615/sncore
        public int UpdateImages(ManagedSecurityContext sec)
        {
            GetACL().Check(sec, DataOperation.Update);

            int result   = 0;
            Uri basehref = null;

            Uri.TryCreate(mInstance.LinkUrl, UriKind.Absolute, out basehref);

            IList items = Session.CreateCriteria(typeof(AccountFeedItem))
                          .Add(Expression.Eq("AccountFeed.Id", mInstance.Id))
                          .List();

            foreach (AccountFeedItem item in items)
            {
                IList <HtmlImage> images = null;

                try
                {
                    images = HtmlImageExtractor.Extract(item.Description, basehref);
                }
                catch
                {
                    continue;
                }

                TimeSpan tsDistribution = new TimeSpan(0, 30, 0);

                foreach (HtmlImage image in images)
                {
                    AccountFeedItemImg x_img = null;

                    // images may appear only once, repeating images don't get updated
                    // nor images linked from multiple feeds or feed items

                    x_img = (AccountFeedItemImg)Session.CreateCriteria(typeof(AccountFeedItemImg))
                            .Add(Expression.Eq("Url", image.Src)).UniqueResult();

                    if (x_img != null)
                    {
                        // image already exists
                        continue;
                    }

                    x_img                 = new AccountFeedItemImg();
                    x_img.Created         = item.Created.Subtract(tsDistribution); // shuffle images
                    tsDistribution        = tsDistribution.Add(new TimeSpan(0, 30, 0));
                    x_img.Modified        = DateTime.UtcNow;
                    x_img.AccountFeedItem = item;
                    x_img.Description     = image.Alt;
                    x_img.Interesting     = false;
                    x_img.Url             = image.Src;

                    // fetch the image to get its size
                    try
                    {
                        WebClient client = new WebClient();
                        client.Headers["Accept"]     = "*/*";
                        client.Headers["User-Agent"] = ManagedConfiguration.GetValue(Session, "SnCore.Web.UserAgent", "SnCore/1.0");
                        byte[] data = client.DownloadData(x_img.Url);
                        if (data == null)
                        {
                            throw new Exception("Missing file data.");
                        }
                        ThumbnailBitmap bitmap = new ThumbnailBitmap(data);
                        x_img.Thumbnail = bitmap.Thumbnail;
                        x_img.Visible   = mInstance.PublishImgs;

                        // hide images smaller than the thumbnail size
                        if (bitmap.FullSize.Height < ThumbnailBitmap.s_ThumbnailSize.Height ||
                            bitmap.FullSize.Width < ThumbnailBitmap.s_ThumbnailSize.Width)
                        {
                            x_img.Visible = false;
                        }
                    }
                    catch (Exception ex)
                    {
                        x_img.LastError = ex.Message;
                        x_img.Visible   = false;
                    }

                    Session.Save(x_img);
                    result++;
                }
            }

            return(result);
        }
コード例 #25
0
        public void CreateSecurePostTest()
        {
            TransitPost t_post = new TransitPost();

            t_post.Body  = Guid.NewGuid().ToString();
            t_post.Title = Guid.NewGuid().ToString();
            t_post.Id    = Blog.CreateOrUpdatePost(Ticket, t_post);
            Assert.Greater(t_post.Id, 0);

            TransitImage t_image = new TransitImage();

            t_image.Name = Guid.NewGuid().ToString();

            Bitmap   b = new Bitmap(480, 480);
            Graphics g = Graphics.FromImage(b);

            g.FillEllipse(Brushes.Red, 0, 0, 480, 480);
            ThumbnailBitmap tb = new ThumbnailBitmap(b);

            t_image.Data      = tb.Bitmap;
            t_image.Thumbnail = tb.Thumbnail;

            t_image.Id = Blog.CreateOrUpdatePostImage(Ticket, t_post.Id, t_image);
            Assert.Greater(t_image.Id, 0);

            TransitLogin t_login = new TransitLogin();

            t_login.Username = Guid.NewGuid().ToString();
            t_login.Password = Guid.NewGuid().ToString();
            t_login.Role     = TransitLoginRole.Guest;
            t_login.Id       = Blog.CreateOrUpdateLogin(Ticket, t_login);
            Assert.Greater(t_login.Id, 0);

            TransitComment t_comment = new TransitComment();

            t_comment.IpAddress = "127.0.0.1";
            t_comment.Text      = Guid.NewGuid().ToString();
            t_comment.LoginId   = t_login.Id;
            t_comment.Id        = Blog.CreateOrUpdatePostComment(Ticket, t_post.Id, t_comment);
            Assert.Greater(t_comment.Id, 0);

            int t_postlogin_id = Blog.CreateOrUpdatePostLogin(Ticket, t_post.Id, t_login);

            Assert.Greater(t_postlogin_id, 0);

            string authticket = Blog.Login(t_login.Username, t_login.Password);

            // check access to posts

            TransitPost t_post_unauthorized = Blog.GetPostById(null, t_post.Id);

            Assert.IsTrue(string.IsNullOrEmpty(t_post_unauthorized.Body), "Unathorized post body wasn't stripped.");

            TransitPost t_post_authorized = Blog.GetPostById(authticket, t_post.Id);

            Assert.IsFalse(string.IsNullOrEmpty(t_post_authorized.Body), "Authorized post was stripped.");

            // check access to images

            TransitImage t_image_unauthorized = Blog.GetImageWithBitmapById(null, t_image.Id);

            Assert.IsTrue(t_image_unauthorized.Data == null, "Unathorized image returned data.");

            TransitImage t_image_authorized = Blog.GetImageWithBitmapById(authticket, t_image.Id);

            Assert.IsTrue(t_image_authorized.Data != null, "Authorized image didn't return data.");

            // check access to comments

            TransitComment t_comment_unauthorized = Blog.GetCommentById(null, t_comment.Id);

            Assert.IsTrue(string.IsNullOrEmpty(t_comment_unauthorized.Text), "Unathorized comment returned data.");

            TransitComment t_comment_authorized = Blog.GetCommentById(authticket, t_comment.Id);

            Assert.IsFalse(string.IsNullOrEmpty(t_comment_authorized.Text), "Authorized comment didn't return data.");

            Blog.DeletePost(Ticket, t_post.Id);
        }
コード例 #26
0
ファイル: WebServiceBaseTest.cs プロジェクト: qwdf1615/sncore
 public static byte[] GetNewBitmap()
 {
     return(ThumbnailBitmap.GetBitmapDataFromText(GetNewString(), 12, 240, 100));
 }
コード例 #27
0
    public override TransitPicture GetPictureWithBitmap(int id)
    {
        string url = Request["Src"];

        if (string.IsNullOrEmpty(url))
        {
            throw new Exception("Invalid url.");
        }

        string         key    = string.Format("AccountFeedItemPicture:{0}", url.GetHashCode());
        TransitPicture result = (TransitPicture)Cache[key];

        if (result != null)
        {
            return(result);
        }

        // fetch the image to get its size
        WebClient client = new WebClient();

        client.Headers["Accept"]     = "*/*";
        client.Headers["User-Agent"] = SessionManager.GetCachedConfiguration("SnCore.Web.UserAgent", "SnCore/1.0");
        result      = new TransitPicture();
        result.Name = url;

        try
        {
            byte[] data = client.DownloadData(url);

            if (data == null)
            {
                throw new Exception("Missing file data.");
            }

            result.Bitmap = new ThumbnailBitmap(new MemoryStream(data), new Size(0, 0),
                                                ThumbnailBitmap.s_FullSize, ThumbnailBitmap.s_ThumbnailSize).Bitmap;

            string created = (string)client.ResponseHeaders["Created"];
            if (string.IsNullOrEmpty(created))
            {
                created = (string)client.ResponseHeaders["Date"];
            }
            if (string.IsNullOrEmpty(created) || !DateTime.TryParse(created, out result.Created))
            {
                result.Created = DateTime.Now;
            }

            string modified = (string)client.ResponseHeaders["Modified"];
            if (string.IsNullOrEmpty(modified) || !DateTime.TryParse(modified, out result.Modified))
            {
                result.Modified = DateTime.Now;
            }
        }
        catch (Exception ex)
        {
            string message = string.Format("This image cannot be displayed.\n{0}\n{1}",
                                           ex.Message, url);
            result.Bitmap   = ThumbnailBitmap.GetBitmapDataFromText(message, 8, 0, 0);
            result.Modified = result.Created = DateTime.Now;
        }

        Cache.Insert(key, result, null, Cache.NoAbsoluteExpiration,
                     SessionManager.DefaultCacheTimeSpan);

        return(result);
    }
コード例 #28
0
ファイル: PicturePage.cs プロジェクト: qwdf1615/sncore
    protected void Page_Load(object sender, EventArgs e)
    {
        try
        {
            Nullable <Size>     resize = Size;
            Nullable <DateTime> ims    = IfModifiedSince;

            if (ims.HasValue)
            {
                if (ims.Value.ToUniversalTime().AddSeconds(CacheDuration) > DateTime.UtcNow)
                {
                    Response.StatusCode = 304;
                    return;
                }
            }

            TransitPicture p = null;

            switch (PageType)
            {
            case PicturePageType.Thumbnail:

                if (RequestId == 0)
                {
                    p = GetRandomPictureWithThumbnail();

                    if (p == null)
                    {
                        p         = new TransitPicture();
                        p.Id      = 0;
                        p.Created = p.Modified = DateTime.Now;
                        p.Name    = Guid.NewGuid().ToString();
                        if (!resize.HasValue)
                        {
                            resize = new Size(100, 150);
                        }
                        p.Bitmap = ThumbnailBitmap.GetBitmapDataFromText("?", 72,
                                                                         resize.Value.Width, resize.Value.Height);
                    }
                }
                else
                {
                    p = ims.HasValue ?
                        GetPictureWithThumbnail(RequestId, ims.Value) :
                        GetPictureWithThumbnail(RequestId);
                }

                break;

            case PicturePageType.Bitmap:

                p = ims.HasValue ?
                    GetPictureWithBitmap(RequestId, ims.Value) :
                    GetPictureWithBitmap(RequestId);

                break;
            }

            if (p == null)
            {
                if (ims.HasValue)
                {
                    Response.StatusCode = 304;
                    return;
                }
                else
                {
                    throw new Exception("Invalid picture id.");
                }
            }

            Response.Cache.SetLastModified(p.Modified.ToLocalTime());
            Response.Cache.SetCacheability(HttpCacheability.Private);

            p.Name = (string.IsNullOrEmpty(p.Name)) ? p.Id.ToString() + ".jpg" : p.Id.ToString() + "-" + p.Name;

            if (resize.HasValue)
            {
                ThumbnailBitmap resized = new ThumbnailBitmap(new MemoryStream(p.Bitmap), new Size(0, 0),
                                                              resize.Value, resize.Value);

                switch (PageType)
                {
                case PicturePageType.Bitmap:
                    p.Bitmap = resized.Bitmap;
                    break;

                case PicturePageType.Thumbnail:
                    p.Bitmap = resized.Thumbnail;
                    break;
                }
            }

            switch (PageType)
            {
            case PicturePageType.Thumbnail:
                p.Name.Insert(0, "thumbnail-");
                break;
            }

            Response.ContentType = "image/" + Path.GetExtension(p.Name).TrimStart(".".ToCharArray());
            Response.AddHeader("Content-disposition", "attachment; filename=" + p.Name);
            Response.AddHeader("Created", p.Created.ToString("r"));
            Response.AddHeader("Modified", p.Modified.ToString("r"));
            Response.BinaryWrite(p.Bitmap);
            Response.End();
        }
        catch (Exception ex)
        {
            Response.Write(ex.Message);
        }
    }
コード例 #29
0
        protected void Page_Load(object sender, EventArgs e)
        {
            try
            {
                Nullable <DateTime> ims = IfModifiedSince;

                if (ims.HasValue)
                {
                    if (ims.Value.ToUniversalTime().AddSeconds(CacheDuration) > DateTime.UtcNow)
                    {
                        Response.StatusCode = 304;
                        return;
                    }
                }

                Picture p = null;

                switch (PageType)
                {
                case PicturePageType.Thumbnail:

                    if (RequestId == 0)
                    {
                        p = GetRandomPictureWithThumbnail();

                        if (p == null)
                        {
                            p         = new Picture();
                            p.Id      = 0;
                            p.Created = p.Modified = DateTime.Now;
                            p.Name    = Guid.NewGuid().ToString();
                            p.Bitmap  = ThumbnailBitmap.GetBitmapDataFromText("?", 72, 100, 150);
                        }
                    }
                    else
                    {
                        p = ims.HasValue ?
                            GetPictureWithThumbnail(RequestId, ims.Value) :
                            GetPictureWithThumbnail(RequestId);
                    }

                    break;

                case PicturePageType.Bitmap:

                    p = ims.HasValue ?
                        GetPictureWithBitmap(RequestId, ims.Value) :
                        GetPictureWithBitmap(RequestId);

                    break;
                }

                if (p == null)
                {
                    Response.StatusCode = (ims.HasValue ? 304 : 404);
                    return;
                }

                if (p.Bitmap == null)
                {
                    Response.Redirect("./images/site/access.gif", true);
                    return;
                }

                Response.Cache.SetLastModified(p.Modified.ToLocalTime());
                Response.Cache.SetCacheability(HttpCacheability.Private);

                p.Name = (string.IsNullOrEmpty(p.Name)) ? p.Id.ToString() + ".jpg" : p.Id.ToString() + "-" + p.Name;

                switch (PageType)
                {
                case PicturePageType.Thumbnail:
                    p.Name.Insert(0, "thumbnail-");
                    break;

                case PicturePageType.Bitmap:
                    if (!string.IsNullOrEmpty(Copyright))
                    {
                        ThumbnailBitmap bitmap = new ThumbnailBitmap(p.Bitmap);
                        bitmap.AddCopyright(Copyright);
                        p.Bitmap = bitmap.Bitmap;
                    }
                    break;
                }

                Response.ContentType = "image/" + Path.GetExtension(p.Name).TrimStart(".".ToCharArray());
                Response.AddHeader("Content-disposition", "attachment; filename=" + p.Name);
                Response.AddHeader("Created", p.Created.ToString("r"));
                Response.AddHeader("Modified", p.Modified.ToString("r"));
                Response.BinaryWrite(p.Bitmap);
                Response.End();
            }
            catch (ThreadAbortException)
            {
            }
            catch (Exception ex)
            {
                Response.Write(ex.Message);
            }
        }