Avatar billede Slettet bruger
02. oktober 2007 - 23:02 Der er 15 kommentarer og
1 løsning

snapshot komponent

Hejsa

- Jeg søger en asp-komponent som kan tage et snapshot af en webside, og gemme det som jpg-billede på serveren.

Komponentet skal helst være gratis eller koste næsten ingenting.
Jeg har set en del forskellige komponenter, men de koster mindst $49 eller mere, og det er der slet ikke budget til i det som jeg er ved at lave...

- Er der nogen som kender noget?

\Dan
Avatar billede olebole Juniormester
02. oktober 2007 - 23:12 #1
<ole>

Kan du mon ikke bruge det her til noget:
    http://www.eksperten.dk/artikler/1133

/mvh
</bole>
Avatar billede Slettet bruger
02. oktober 2007 - 23:38 #2
Hej Ole

- tjoe... det kan vel godt bruges...

Mange tak for hjælpen - men findes der virkelig ikke en billig måde at gøre det på egen server på?

- smid et svar for point...

\Dan
Avatar billede olebole Juniormester
02. oktober 2007 - 23:43 #3
Lad spørgsmålet stå åbent og se, om der kommer andre forslag  :)
Avatar billede sherlock Nybegynder
03. oktober 2007 - 00:41 #4
Har du adgang til asp.net?
Avatar billede Slettet bruger
03. oktober 2007 - 10:07 #5
Hej Sherlock

- Ja, jeg har en server som kører windows server 2003 så ja - jeg har ved adgang til asp.net...
Men hvis vi skal ud i det er jeg helt blank på hvordan jeg får dette op at køre - men er der en mulighed der så?

\Dan
Avatar billede sherlock Nybegynder
03. oktober 2007 - 10:40 #6
Det kode her kan lægges i en aspx-side.

http://www.eksperten.dk/spm/750657

Jeg har ikke tid nok før tidligst i aften, hvis du skal have mere hjælp til at lave det om.
Avatar billede Slettet bruger
03. oktober 2007 - 15:14 #7
Hej sherlock

- jeg prøver lige at se på det her i weekenden, når jeg kommer hjem til min server, for hvis jeg forstår det rigtigt så er der vel lige nogle ting der sikkert skal konfigureres der først...

kender du en god guide til hvordan sådan noget gøres på en windows server 2003?

- og jeg bliver nok nød til at sige at jeg er ret ny når det kommer til asp.net - men jeg er frisk på at arbejde med at få det op at køre med de snapshots.

Og har jeg forstået det rigtigt at man kan godt bare have et script i asp.net i en aspx-fil som så henter de snapshots og som gemmer det nogle bestemte steder på serveren - og så bliver alt andet afviklet i asp classic?

Forhistorien er nemlig lidt den at jeg i et cms-system (som jeg selv laver) vil have en linksamling - og så skal de her snapshots være hentet og ligge på serveren på forhånd. Altså cms'en skal hente dem og ikke brugeren af hjemmesiden...

Håber du forstår...

Og sig til, sherlock, hvis du vil have flere point for det her end dem der er her... Jeg vil gerne smide rigtig mange point for at få dette her op at køre...

\Dan
Avatar billede sherlock Nybegynder
03. oktober 2007 - 21:05 #8
Først lige en lille info:

Dit site skal køre asp.net 2.0
Der er 4 filer. De 3 første skal ligge i roden.
  web.config
  default.aspx
  default.aspx.vb

Den sidste skal ligge i et underbibliotek
  app_code\screeny.vb

Så kan du kalde det med disse parametre:

http://localhost/dannielsencms/default.aspx?siteurl=www.tv2.dk&screenw=1024&screenh=768&imagew=1024&imageh=768&snapshotfile=snapexp.jpg

  siteurl= det site du vil tage et snapshot af
  screenw= bredden på sitet når snapshottet skal tages
  screenh= højden på sitet når snapshottet skal tages
  imagew= bredden på det gemte snapshot
  imageh= højden på det gemte snapshot
  snapshotfile= navnet på den snapshottet (inkl. ".jpg")
  nexturl= den url der skal redirectes til når snapshottet er gemt

Det virker, men du kan nok få brug for at lave ændringer :)

Herunder kommer filerne:
Avatar billede sherlock Nybegynder
03. oktober 2007 - 21:05 #9
web.config:

<?xml version="1.0"?>
<!--
    Note: As an alternative to hand editing this file you can use the
    web admin tool to configure settings for your application. Use
    the Website->Asp.Net Configuration option in Visual Studio.
    A full list of settings and comments can be found in
    machine.config.comments usually located in
    \Windows\Microsoft.Net\Framework\v2.x\Config
-->
<configuration>
    <appSettings/>
    <system.web>
        <!--
            Set compilation debug="true" to insert debugging
            symbols into the compiled page. Because this
            affects performance, set this value to true only
            during development.

            Visual Basic options:
            Set strict="true" to disallow all data type conversions
            where data loss can occur.
            Set explicit="true" to force declaration of all variables.
        -->
        <compilation  debug="true" defaultLanguage="vb">
  <assemblies>
    <add assembly="System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=B77A5C561934E089" />
  </assemblies>
  </compilation>
        <pages>
            <namespaces>
                <clear/>
                <add namespace="System"/>
                <add namespace="System.Collections"/>
                <add namespace="System.Collections.Specialized"/>
                <add namespace="System.Configuration"/>
                <add namespace="System.Text"/>
                <add namespace="System.Text.RegularExpressions"/>
                <add namespace="System.Web"/>
                <add namespace="System.Web.Caching"/>
                <add namespace="System.Web.SessionState"/>
                <add namespace="System.Web.Security"/>
                <add namespace="System.Web.Profile"/>
                <add namespace="System.Web.UI"/>
                <add namespace="System.Web.UI.WebControls"/>
                <add namespace="System.Web.UI.WebControls.WebParts"/>
                <add namespace="System.Web.UI.HtmlControls"/>
            </namespaces>
        </pages>
        <!--
            The <authentication> section enables configuration
            of the security authentication mode used by
            ASP.NET to identify an incoming user.
        -->
        <authentication mode="None"/>
        <!--
            The <customErrors> section enables configuration
            of what to do if/when an unhandled error occurs
            during the execution of a request. Specifically,
            it enables developers to configure html error pages
            to be displayed in place of a error stack trace.

        <customErrors mode="RemoteOnly" defaultRedirect="GenericErrorPage.htm">
            <error statusCode="403" redirect="NoAccess.htm" />
            <error statusCode="404" redirect="FileNotFound.htm" />
        </customErrors>
        -->
    </system.web>
</configuration>
Avatar billede sherlock Nybegynder
03. oktober 2007 - 21:06 #10
default.aspx:

<%@ Page Language="VB" AutoEventWireup="false" CodeFile="Default.aspx.vb" Inherits="_Default" %>

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" >
<head runat="server">
    <title>GetSiteImage</title>
</head>
<body>
    <form id="form1" runat="server">
    <div>
    </form>
</body>
</html>
Avatar billede sherlock Nybegynder
03. oktober 2007 - 21:07 #11
default.aspx.vb:


Partial Class _Default
    Inherits System.Web.UI.Page

    Dim siteUrl As String
    Dim screenWidth As Integer
    Dim screenHeight As Integer
    Dim imageWidth As Integer
    Dim imageHeight As Integer
    Dim nextUrl As String
    Dim snapshotFile As String

    Protected Sub Page_Load(ByVal sender As Object, ByVal e As System.EventArgs) Handles Me.Load
        siteUrl = Request("siteurl")
        screenWidth = Integer.Parse(Request("screenw"))
        screenHeight = Integer.Parse(Request("screenh"))
        imageWidth = Integer.Parse(Request("imagew"))
        imageHeight = Integer.Parse(Request("imageh"))
        nextUrl = Request("nexturl")
        snapshotFile = Request("snapshotfile")

        Dim NewTh As New Threading.Thread(AddressOf DoIT)
        NewTh.SetApartmentState(Threading.ApartmentState.STA)
        NewTh.Start()
        While NewTh.ThreadState = Threading.ThreadState.Running
        End While
        If Not nextUrl = Nothing Then
            If nextUrl.Length > 0 Then
                Response.Redirect(nextUrl)
            End If
        End If
    End Sub

    Sub DoIT()
        Try
            Dim thumb As New GetSiteThumbnail.GetImage("http://" & siteUrl, screenWidth, screenHeight, imageWidth, imageHeight)
            Dim x As System.Drawing.Bitmap = thumb.GetBitmap()
            x.Save(Server.MapPath(".") & "\" & snapshotFile)
        Catch ex As Exception
            Dim y As System.IO.StreamWriter = System.IO.File.CreateText(Server.MapPath(".") & "\error.txt")
            y.WriteLine(ex.Message & vbCrLf & ex.Source)
            y.Flush()
            y.Close()
        Finally
        End Try
    End Sub
End Class
Avatar billede sherlock Nybegynder
03. oktober 2007 - 21:07 #12
screeny.vb:

Imports System
Imports System.Drawing
Imports System.Drawing.Imaging
Imports System.Windows.Forms
Imports System.Diagnostics

Namespace GetSiteThumbnail

    Public Class GetImage
        Private S_Height As Integer
        Private S_Width As Integer
        Private F_Height As Integer
        Private F_Width As Integer
        Private MyURL As String

        Property ScreenHeight() As Integer
            Get
                Return S_Height
            End Get
            Set(ByVal value As Integer)
                S_Height = value
            End Set
        End Property

        Property ScreenWidth() As Integer
            Get
                Return S_Width
            End Get
            Set(ByVal value As Integer)
                S_Width = value
            End Set
        End Property

        Property ImageHeight() As Integer
            Get
                Return F_Height
            End Get
            Set(ByVal value As Integer)
                F_Height = value
            End Set
        End Property

        Property ImageWidth() As Integer
            Get
                Return F_Width
            End Get
            Set(ByVal value As Integer)
                F_Width = value
            End Set
        End Property

        Property WebSite() As String
            Get
                Return MyURL
            End Get
            Set(ByVal value As String)
                MyURL = value
            End Set
        End Property

        Sub New(ByVal WebSite As String, ByVal ScreenWidth As Integer, ByVal ScreenHeight As Integer, ByVal ImageWidth As Integer, ByVal ImageHeight As Integer)
            Me.WebSite = WebSite
            Me.ScreenWidth = ScreenWidth
            Me.ScreenHeight = ScreenHeight
            Me.ImageHeight = ImageHeight
            Me.ImageWidth = ImageWidth
        End Sub

        Function GetBitmap() As Bitmap
            Dim Shot As New WebPageBitmap(Me.WebSite, Me.ScreenWidth, Me.ScreenHeight)
            Shot.GetIt()
            Dim Pic As Bitmap = Shot.DrawBitmap(Me.ImageHeight, Me.ImageWidth)
            Return Pic
        End Function
    End Class

    Class WebPageBitmap
        Dim MyBrowser As WebBrowser
        Dim URL As String
        Dim Height As Integer
        Dim Width As Integer

        Sub New(ByVal url As String, ByVal width As Integer, ByVal height As Integer)
            Me.Height = Height
            Me.Width = width
            Me.URL = url
            MyBrowser = New WebBrowser
            MyBrowser.ScrollBarsEnabled = False
            MyBrowser.Size = New Size(Me.Width, Me.Height)
        End Sub

        Sub GetIt()
            MyBrowser.Navigate(Me.URL)
            While MyBrowser.ReadyState <> WebBrowserReadyState.Complete
                Application.DoEvents()
            End While
        End Sub

        Function DrawBitmap(ByVal theight As Integer, ByVal twidth As Integer) As Bitmap
            Dim myBitmap As New Bitmap(Width, Height)
            Dim DrawRect As New Rectangle(0, 0, Width, Height)
            MyBrowser.DrawToBitmap(myBitmap, DrawRect)
            Dim imgOutput As System.Drawing.Image = myBitmap
            Dim oThumbNail As System.Drawing.Image = New Bitmap(twidth, theight, imgOutput.PixelFormat)
            Dim g As Graphics = Graphics.FromImage(oThumbNail)
            g.CompositingQuality = Drawing2D.CompositingQuality.HighSpeed
            g.SmoothingMode = Drawing2D.SmoothingMode.HighSpeed
            g.InterpolationMode = Drawing2D.InterpolationMode.HighQualityBilinear
            Dim oRectangle As Rectangle = New Rectangle(0, 0, twidth, theight)
            g.DrawImage(imgOutput, oRectangle)
            Try
                Return oThumbNail
            Catch ex As Exception
            Finally
                imgOutput.Dispose()
                imgOutput = Nothing
                MyBrowser.Dispose()
                MyBrowser = Nothing
            End Try
        End Function
    End Class

End Namespace
Avatar billede Slettet bruger
03. oktober 2007 - 21:34 #13
Hej sherlock

- mange tak for hjælpen indtil nu - det er næsten alt for galt... sagt på godt jysk.

men jeg har lige en sidste ting... Kan jeg være sikker på at det er asp.net 2.0 når OS på serveren er windows server 2003? Ellers hvordan finder jeg ud af om det er det? Og hvis det ikke er hvad kan man så gøre?

- Endvidere - for at installere asp.net skal man så bare installere det under "Tilføj/Fjern programmer" og så windows komponenter inde i kontrol-panelet - som en ekstra ting til IIS?

Hvad skal vi sige 200 point for et svar på dette?

\Dan
Avatar billede sherlock Nybegynder
03. oktober 2007 - 21:46 #14
Det er 2.0 der følger med 2003. Jeg har ikke selv rodet med en server i flere år.
Og jeg er ikke nogen haj til det. Så jeg kan ikke hjælpe dig.
Google er din ven:) De 30 point er helt rigeligt.
Avatar billede Slettet bruger
06. november 2007 - 23:29 #15
Hej Sherlock

UNDSKYLD at jeg først svarer tilbage nu...
- Men jeg har haft nogle problemer med min server siden, så jeg har ikke haft mulighed for at teste scriptet før nu - og det var uden succes..

Skal jeg forstå det som om man kun kan køre scriptet på serveren, og ikke fra en anden pc som er tilsluttet via LAN..

Sådan at jeg skriver en ip-adresse til serveren i stedet for "localhost"?

\Dan
Avatar billede Slettet bruger
06. november 2007 - 23:29 #16
du får lige point ligegyldigt hvad...

\Dan
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Kurser inden for grundlæggende programmering

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester