Modul: Automatischer Image upload zu ImgBB.com

Hier könnt Ihr gute, von Euch geschriebene Codes posten. Sie müssen auf jeden Fall funktionieren und sollten möglichst effizient, elegant und beispielhaft oder einfach nur cool sein.
Benutzeravatar
Kurzer
Beiträge: 1614
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Modul: Automatischer Image upload zu ImgBB.com

Beitrag von Kurzer »

Hallo,

weil ich es leid war für meine Forenbeiträge die Screenshots immer manuell auf einen Imagehoster hochzuladen ist dieses Modul entstanden.

Modul ImgBBUploader:

Das Modul ermöglicht es ein Bild automatisiert auf den Webspace des Imagehosters http://www.ImgBB.com hochzuladen und gibt bei Erfolg die folgenden drei Links zurück:
- Link zum Bild in der ImgBB-Webseitenvorschau
- Link zum Bild (Direktlink)
- Link zum Löschen des Bildes

Das Modul bietet hierfür die folgende öffentliche Prozedur an:

Code: Alles auswählen

	Procedure.i ImgBBUpload(sImageFile.s, sAPIKey.s, *stOutImgBBResult.ImgBBResult)
		; +-----------------------------------------------------------------
		; |Description  : Automatically uploads an image to the image hoster www.ImgBB.com
		; |               The Imagehoster supports the image formats JPG, PNG, BMP and GIF with a maximum size of 16 MB.
		; |Arguments    : sImageFile      : The full path and filename of the image
		; |               sAPIKey         : The ImgBB.com API key, wich is necessary for the upload to work
		; |               stOutImgBBResult: A structured return variable of type ImgBBResult containing
		; |                                 the links to the uploaded image (preview link, direct link, delete link)
		; |Results      : 1, if the upload was successful, otherwise 0.
		; |Remarks      : -
		; +-----------------------------------------------------------------
Die Resultvariable, in welche nach erfolgreichem Bildupload die Links zum Bild übergeben werden, muss vom Typ ImgBBResult sein:

Code: Alles auswählen

	Structure ImgBBResult
		sFileStatus.s							; "Ok" = ok
		sHttpStatus.s							; "200" = ok
		sUploadSuccessfull.s				; true / false
		sViewerLink.s
		sDirectLink.s
		sDeleteLink.s
	EndStructure
Ich habe mich für ImgBB.com entschieden, weil dieser Imagehoster eine API zum upload anbietet. Somit kann man hier recht bequem mit HTTPReqeust ein Base64 kodiertes Image hochladen und bekommt ein JSON-Ergebnis mit den nötigen links und Statuswerten zurück.

Um die API nutzen zu können muss man dort allerdings einen Useraccount registrieren und kann dann in seinem Profil einen API-Key beziehen. Den API Key kann man sich auf Knopfdruck gleich anzeigen lassen und sofort benutzen. Datenparanoiker wie mich kann ich beruhigen, denn man kann den Account dort auch mit einer lustigen Wegwerf-Emailadresse und einem ausgedachten Usernamen anlegen. 8)

Im Profil gibt es auch eine Checkbox [x] Privat-Modus. Zwar habe ich keine Funktion auf ImgBB gefunden, mit der man die Bilder von anderen Usern asnehen könnte, aber sicherheitshalber sollte man diese Checkbox mal setzen. Man weiß ja nie. :-)
Bild

Am Ende des Moduls habe ich ein Beispielprogramm angefügt, welches per CompilerIf #PB_Compiler_IsMainFile gekapselt ist. Das Beispielprogramm ist faktisch ein vollwertiges Uploadprogramm. Ich habe es absichtlich etwas umfangreicher gestaltet, weil ich's dann gleich als Uploader für mich selbst benutzen kann. :-)

Das Beispielprogramm benutzt einen von mir registrierten Demo-API Key (ja sicher, der Account wurde mit einer Fantasie-Emailadresse angelegt). Ihr solltet aber bitte einen eigenen API Key anfordern, wenn ihr das Modul dauerhaft benutzt. Es ist möglich, dass der Demo-API Key sehr schnell geblockt wird, wenn ihn zu viele nutzen oder irgendwelche Spaßvögel ungeeignetes Bildmaterial hochladen. Die Bilder werden lt. Aussage von ImgBB.com von Menschen geprüft und müssen den Nutzungsbedingungen von ImgBB.com entsprechen (sieh auch hier https://imgbb.com/tos).

So, hier noch ein Screenshot des Beispielprogramms...
Bild

Changelog:

Code: Alles auswählen

;* 1.01 - rel 01.05.2019: 
;*        fix - A closeFile() command was missing in the error handling (in line 174)
... und der Modul Sourcecode:

Code: Alles auswählen

;*************************************************************************
;* ImgBBUploader (c) Kurzer
;*************************************************************************
;*
;* Modulname         : ImgBBUploader
;* Filename          : mod_ImgBBUploader.pbi
;* Filetype          : Module [MainApp, Formular, Include, Module, Data]
;* Programming lang. : Purebasic 5.70+ Minimum because of HTTPRequest()
;* String-Format     : Unicode [Ascii, Unicode, All]
;* Platform          : Windows [Windows, Mac, Linux, All]
;* Processor         : All [x86, x64, All]
;* Compileroptions   : -
;* Version           : 1.01
;* Date              : 01.05.2019
;* Autor             : Kurzer
;* Dependencies      :
;* -----------------------------------------------------------------------
;* Description:
;*
;* Uploads an image to the image hoster www.ImgBB.com
;*
;* Attention: You need an own API key from www.ImgBB.com and have to register
;* a user account. The example at the end of this module uses an API key which
;* will be probably blocked if it is used too often. So you better get your
;* own API key at https://api.imgbb.com/
;*
;* The image hoster supports the image formats JPG, PNG, BMP and GIF with a
;* maximum size of 16 MB.
;*
;* Please respect the ImgBB's terms of use: https://imgbb.com/tos
;*
;* For legal consequences arising from the use of this module (especially if
;* the user uploads non-compliant images), the user of this module alone is
;* responsible and in no way the author of the module!
;* -----------------------------------------------------------------------
;* Changelog:
;* 1.01 - rel 01.05.2019: 
;*        fix - A closeFile() command was missing in the error handling (in line 174)
;* 1.00 - rel 22.04.2019: 
;*        add - First release
;* -----------------------------------------------------------------------
;* English-Forum     : https://www.purebasic.fr/english/viewtopic.php?f=27&t=72696
;* French-Forum      :
;* German-Forum      : https://www.purebasic.fr/german/viewtopic.php?f=8&t=31417
;* -----------------------------------------------------------------------
;* License: MIT License
;* 
;* Copyright (c) 2016/19 Kurzer
;* 
;* Permission is hereby granted, free of charge, to any person obtaining a copy
;* of this software and associated documentation files (the "Software"), to deal
;* in the Software without restriction, including without limitation the rights
;* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
;* copies of the Software, and to permit persons to whom the Software is
;* furnished to do so, subject to the following conditions:
;*
;* The above copyright notice and this permission notice shall be included in all
;* copies or substantial portions of the Software.
;* 
;* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
;* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
;* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
;* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
;* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
;* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
;* SOFTWARE.
;* 
;* ---------------- German translation of the MIT License ----------------
;*
;* MIT Lizenz:
;*
;* Hiermit wird unentgeltlich jeder Person, die eine Kopie der Software und der
;* zugehörigen Dokumentationen (die "Software") erhält, die Erlaubnis erteilt,
;* sie uneingeschränkt zu nutzen, inklusive und ohne Ausnahme mit dem Recht, sie
;* zu verwenden, zu kopieren, zu verändern, zusammenzufügen, zu veröffentlichen,
;* zu verbreiten, zu unterlizenzieren und/oder zu verkaufen, und Personen, denen
;* diese Software überlassen wird, diese Rechte zu verschaffen, unter den folgenden
;* Bedingungen:
;* 
;* Der obige Urheberrechtsvermerk und dieser Erlaubnisvermerk sind in allen Kopien
;* oder Teilkopien der Software beizulegen.
;* 
;* DIE SOFTWARE WIRD OHNE JEDE AUSDRÜCKLICHE ODER IMPLIZIERTE GARANTIE BEREITGESTELLT,
;* EINSCHLIEßLICH DER GARANTIE ZUR BENUTZUNG FÜR DEN VORGESEHENEN ODER EINEM BESTIMMTEN
;* ZWECK SOWIE JEGLICHER RECHTSVERLETZUNG, JEDOCH NICHT DARAUF BESCHRÄNKT. IN KEINEM
;* FALL SIND DIE AUTOREN ODER COPYRIGHTINHABER FÜR JEGLICHEN SCHADEN ODER SONSTIGE
;* ANSPRÜCHE HAFTBAR ZU MACHEN, OB INFOLGE DER ERFÜLLUNG EINES VERTRAGES, EINES DELIKTES
;* ODER ANDERS IM ZUSAMMENHANG MIT DER SOFTWARE ODER SONSTIGER VERWENDUNG DER SOFTWARE
;* ENTSTANDEN.
;*************************************************************************

DeclareModule ImgBBUpload
	;- --- [Module declaration / public elements] ------------------------------------------
	;-
	
	;*************************************************************************
	;- Compiler directives
	;*************************************************************************
	EnableExplicit
	
	;*************************************************************************
	;- Structures
	;*************************************************************************
	Structure ImgBBResult
		sFileStatus.s								; "Ok" = ok
		sHttpStatus.s								; "200" = ok
		sUploadSuccessfull.s				; true / false
		sViewerLink.s
		sDirectLink.s
		sDeleteLink.s
	EndStructure
	
	;*************************************************************************
	;- Public Procedures (dec)
	;*************************************************************************
	Declare.i ImgBBUpload(sImageFile.s, sAPIKey.s, *stOutImgBBResult.ImgBBResult)
	
EndDeclareModule

Module ImgBBUpload
	;-
	;- --- [Module implementation / private elements] -----------------------------------------
	;-
	
	;*************************************************************************
	;- Constants
	;*************************************************************************
	#IMGBB_URL										= "https://api.imgbb.com/1/upload?key=#APIKEY#"
	#IMGBB_PARAMS									= "image="
	
	;*************************************************************************
	;- Private Procedures (imp)
	;*************************************************************************
	
	;*************************************************************************
	;- Public Procedures (imp)
	;*************************************************************************
	Procedure.i ImgBBUpload(sImageFile.s, sAPIKey.s, *stOutImgBBResult.ImgBBResult)
		; +-----------------------------------------------------------------
		; |Description  : Automatically uploads an image to the image hoster www.ImgBB.com
		; |               The Imagehoster supports the image formats JPG, PNG, BMP and GIF with a maximum size of 16 MB.
		; |Arguments    : sImageFile      : The full path and filename of the image
		; |               sAPIKey         : The ImgBB.com API key, wich is necessary for the upload to work
		; |               stOutImgBBResult: A structured return variable of type ImgBBResult containing
		; |                                 the links to the uploaded image (preview link, direct link, delete link)
		; |Results      : 1, if the upload was successful, otherwise 0.
		; |Remarks      : -
		; +-----------------------------------------------------------------
		Protected.i *Buffer, iImgFile, iLength, iHttpRequest, iJson
		Protected.s sUrl, sParams, sImageB64, sResponse
		
		; Check file extension
		Select LCase(GetExtensionPart(sImageFile))
			Case "jpg", "png", "bmp", "gif"
				; Do nothing, because format is okay
			Default
				*stOutImgBBResult\sFileStatus = "File format error"
				ProcedureReturn 0
		EndSelect
		
		; Open Image file
		iImgFile = ReadFile(#PB_Any, sImageFile)
		If iImgFile = 0
			*stOutImgBBResult\sFileStatus = "File open error"
			ProcedureReturn 0
		EndIf
		
		iLength = Lof(iImgFile)
		If iLength < 1
			*stOutImgBBResult\sFileStatus = "File length error"
			CloseFile(iImgFile)
			ProcedureReturn 0
		EndIf		
		
		; Allocate a memory buffer, load the image into the buffer and encode it to Base64
		*Buffer = AllocateMemory(iLength)
		If *Buffer = 0 
			*stOutImgBBResult\sFileStatus = "File buffer error"
			CloseFile(iImgFile)
			ProcedureReturn 0
		EndIf
		
		iLength = ReadData(iImgFile, *Buffer, iLength)
		CloseFile(iImgFile)
		If iLength = 0
			*stOutImgBBResult\sFileStatus = "File read error"
			FreeMemory(*Buffer)
			ProcedureReturn 0
		EndIf
		
		sImageB64 = Base64Encoder(*Buffer, iLength)
		FreeMemory(*Buffer)
		*stOutImgBBResult\sFileStatus = "Ok"

		; Send image to image hoster
		sURL = #IMGBB_URL
		sURL = ReplaceString(sURL, "#APIKEY#", sAPIKey)
		sParams = URLEncoder(#IMGBB_PARAMS + sImageB64, #PB_UTF8)
		iHttpRequest = HTTPRequest(#PB_HTTP_Post, sURL, sParams)
		If iHttpRequest = 0
			*stOutImgBBResult\sHttpStatus = "HTTPRequest error"
			ProcedureReturn 0
		EndIf
		
		; Check status code of the Http request
		*stOutImgBBResult\sHttpStatus = HTTPInfo(iHttpRequest, #PB_HTTP_StatusCode)
		If *stOutImgBBResult\sHttpStatus <> "200"
			FinishHTTP(iHttpRequest)
			ProcedureReturn 0
		EndIf
		
		sResponse = HTTPInfo(iHttpRequest, #PB_HTTP_Response)
		sResponse = ReplaceString(sResponse, "\/", "/")
		FinishHTTP(iHttpRequest)
		
		; Extract JSON data
		iJson = ParseJSON(#PB_Any, sResponse)
		If iJson = 0
			*stOutImgBBResult\sUploadSuccessfull = "false"
			ProcedureReturn 0
		EndIf
		
		; Check if the upload is flagged as successfully by the image hoster
		If GetJSONBoolean(GetJSONMember(JSONValue(iJson), "success")) = 1
			*stOutImgBBResult\sUploadSuccessfull = "true"
		Else
			*stOutImgBBResult\sUploadSuccessfull = "false"
			FreeJSON(iJson)
			ProcedureReturn 0
		EndIf
		
		*stOutImgBBResult\sViewerLink = GetJSONString(GetJSONMember(GetJSONMember(JSONValue(iJson), "data"), "url_viewer"))
		*stOutImgBBResult\sDirectLink = GetJSONString(GetJSONMember(GetJSONMember(JSONValue(iJson), "data"), "url"))
		*stOutImgBBResult\sDeleteLink = GetJSONString(GetJSONMember(GetJSONMember(JSONValue(iJson), "data"), "delete_url"))
		FreeJSON(iJson)
		ProcedureReturn 1
		
	EndProcedure
EndModule

;-------------------------------------------------------------------------------
;- Main
CompilerIf #PB_Compiler_IsMainFile
	EnableExplicit
	
	#StatusMsg 		= "Drag 'n drop an image file into the red circle"
	#DemoAPIKey 	=	"33f1af445879b680577710583e8ec7b0" ; 33f1af445879b680577710583e8ec7b0
	
	Enumeration 
		#Window = 0
		#Image = 0
		#ImageGadget = 0
		#TextStatus
		#TextViewer
		#StringViewer
		#ButtonViewer
		#TextDirect
		#StringDirect
		#ButtonDirect
		#TextDelete
		#StringDelete
		#ButtonDelete
		#TextAPI
		#StringAPI
	EndEnumeration
	
	Global.i iImageSize = DesktopScaledX(100)
	
	Procedure UploadFile()
		UseModule ImgBBUpload
		Protected stImgBBResult.ImgBBResult
		Protected.s sFileName, sMessage
		
		sFileName = EventDropFiles()
		If FileSize(sFileName) > 0
			TextGadget(#TextStatus, 5, 112, 250, 20, "Uploading image, please wait...")
			If ImgBBUpload(sFilename, #DemoAPIKey, stImgBBResult)
				Debug "File status: " + stImgBBResult\sFileStatus
				Debug "Http status: " + stImgBBResult\sHttpStatus
				Debug "Upload status: " + stImgBBResult\sUploadSuccessfull
				SetGadgetText(#StringViewer, stImgBBResult\sViewerLink)
				SetGadgetText(#StringDirect, stImgBBResult\sDirectLink)
				SetGadgetText(#StringDelete, stImgBBResult\sDeleteLink)
			Else
				TextGadget(#TextStatus, 5, 112, 250, 20, "Error during image upload!")
				sMessage + "File status: " + #TAB$ + stImgBBResult\sFileStatus + #LF$
				sMessage + "Http status: " + #TAB$ + stImgBBResult\sHttpStatus + #LF$
				sMessage + "Upload status: " + #TAB$ + stImgBBResult\sUploadSuccessfull
				MessageRequester("Upload failed - Image upload to ImgBB.com", sMessage, #PB_MessageRequester_Error|#PB_MessageRequester_Ok)
			EndIf
			TextGadget(#TextStatus, 5, 112, 250, 20, #StatusMsg)
		EndIf
		UnuseModule ImgBBUpload
	EndProcedure
	Procedure Copy()
		Select EventGadget()
			Case #ButtonViewer
				SetClipboardText(GetGadgetText(#StringViewer))
			Case #ButtonDirect
				SetClipboardText(GetGadgetText(#StringDirect))
			Case #ButtonDelete
				SetClipboardText(GetGadgetText(#StringDelete))
		EndSelect
	EndProcedure
	Procedure.i CreateDropImage(iImageNo.i)
    If CreateImage(iImageNo, iImageSize, iImageSize) And StartDrawing(ImageOutput(iImageNo))
    Box(0, 0, iImageSize, iImageSize, $ffffff)
      Circle(iImageSize/2, iImageSize/2, iImageSize/2.2, $0000ee)
      Circle(iImageSize/2, iImageSize/2, iImageSize/3.2, $ffffff)
      Circle(iImageSize/2, iImageSize/2, iImageSize/6, $0000ee)
      StopDrawing() 
      ProcedureReturn 1
  EndIf
	ProcedureReturn 0
	EndProcedure
	
	Procedure Main()
		InitNetwork()
		
		If OpenWindow(#Window, 600, 100, 410, 130, "Image upload to ImgBB.com by Kurzer", #PB_Window_MinimizeGadget)
			StickyWindow(#Window, 1)
			If CreateDropImage(#Image)
				ImageGadget(#ImageGadget, 5, 5, iImageSize, iImageSize, ImageID(#Image), #PB_Image_Border)
				EnableGadgetDrop(#ImageGadget, #PB_Drop_Files, #PB_Drag_Copy)
				
				TextGadget(#TextStatus, 5, 112, 250, 20, #StatusMsg)
				TextGadget(#TextViewer, 120, 7, 70, 20, "Viewer link:")
				StringGadget(#StringViewer, 190, 5, 165, 20, "", #PB_String_ReadOnly)
				ButtonGadget(#ButtonViewer, 360, 5, 45, 20, "Copy")
				
				TextGadget(#TextDirect, 120, 30, 70, 20, "Direct link:")
				StringGadget(#StringDirect, 190, 28, 165, 20, "", #PB_String_ReadOnly)
				ButtonGadget(#ButtonDirect, 360, 30, 45, 20, "Copy")
				
				TextGadget(#TextDelete, 120, 53, 70, 20, "Delete link:")
				StringGadget(#StringDelete, 190, 51, 165, 20, "", #PB_String_ReadOnly)
				ButtonGadget(#ButtonDelete, 360, 53, 45, 20, "Copy")
				
				TextGadget(#TextAPI, 120, 82, 70, 20, "Your API key:")
				StringGadget(#StringAPI, 190, 80, 215, 20, #DemoAPIKey, #PB_String_ReadOnly)
				
				BindEvent(#PB_Event_GadgetDrop, @UploadFile(), 0, 0)
				BindGadgetEvent(#ButtonViewer, @Copy(), #PB_EventType_LeftClick)
				BindGadgetEvent(#ButtonDirect, @Copy(), #PB_EventType_LeftClick)
				BindGadgetEvent(#ButtonDelete, @Copy(), #PB_EventType_LeftClick)
				
				Repeat : Until WaitWindowEvent() = #PB_Event_CloseWindow
				
				UnbindEvent(#PB_Event_GadgetDrop, @UploadFile(), 0, 0)
				UnbindGadgetEvent(#ButtonViewer, @Copy(), #PB_EventType_LeftClick)
				UnbindGadgetEvent(#ButtonDirect, @Copy(), #PB_EventType_LeftClick)
				UnbindGadgetEvent(#ButtonDelete, @Copy(), #PB_EventType_LeftClick)
				FreeImage(#Image)
				FreeGadget(#PB_All)
			EndIf
			CloseWindow(#Window)
		EndIf
	EndProcedure
	
	Main()
	End
CompilerEndIf
Viel Spaß damit.

Gruß Kurzer
Zuletzt geändert von Kurzer am 03.05.2019 10:22, insgesamt 11-mal geändert.
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.02 x64, OS: Win 7 Pro x64 & Win 11 x64, Desktopscaling: 125%, CPU: I7 6500, RAM: 16 GB, GPU: Intel Graphics HD 520
Useralter in 2023: 56 Jahre.
Benutzeravatar
RSBasic
Admin
Beiträge: 8022
Registriert: 05.10.2006 18:55
Wohnort: Gernsbach
Kontaktdaten:

Re: Modul: Automatischer Image upload zu ImgBB.com

Beitrag von RSBasic »

Nicht schlecht :allright:
Aus privaten Gründen habe ich leider nicht mehr so viel Zeit wie früher. Bitte habt Verständnis dafür.
Bild
Bild
Benutzeravatar
Sicro
Beiträge: 955
Registriert: 11.08.2005 19:08
Kontaktdaten:

Re: Modul: Automatischer Image upload zu ImgBB.com

Beitrag von Sicro »

Vielen Dank für deine nützlichen Module :allright:
Kurzer hat geschrieben:weil ich es leid war für meine Forenbeiträge die Screenshots immer manuell auf einen Imagehoster hochzuladen
Das automatisiert das Screenshot-Tool Flameshot (Linux) für mich 8)
Für Windows ist das hier anscheinend gut: ShareX

Durch dein Modul ist es jedoch möglich, eigenen Programmen solch eine Funktionalität sehr einfach beizubringen.
Bild
Warum OpenSource eine Lizenz haben sollte :: PB-CodeArchiv-Rebirth :: Pleasant-Dark (Syntax-Farbschema) :: RegEx-Engine (kompiliert RegExes zu NFA/DFA)
Manjaro Xfce x64 (Hauptsystem) :: Windows 10 Home (VirtualBox) :: Neueste PureBasic-Version
Benutzeravatar
SDL
Beiträge: 65
Registriert: 15.09.2006 05:19
Computerausstattung: MSI 990FXA-GD80
AMD FX-8350(3,1GHz) 4-4,4GHz
Corsair Dominator Platinum 8GB 2133 (2240)
2 Nvidia GeForce GTX 550Ti
Xilence XQ semipassives Netzteil 750Watt
SATA III WDC WD10 1TB
SATA III SSD Toshiba 128 GB
SATA III SSD Samsung 840 EVO 250 GB
eSATA WDC WD SE16 500 GB

Wassergekühlt

Win 7 pro
Leistungsindex 7,8
Wohnort: Hansestadt Stendal

Re: Modul: Automatischer Image upload zu ImgBB.com

Beitrag von SDL »

:allright: :allright: das ist sehr nützlich

Danke für teilen :lurk:
Zu meiner Schulzeit war die Bildung kostenlos, für einige aber Umsonst.
Benutzeravatar
uweb
Beiträge: 461
Registriert: 13.07.2005 08:39

Re: Modul: Automatischer Image upload zu ImgBB.com

Beitrag von uweb »

:allright: Vielen Dank!
Benutzeravatar
dige
Beiträge: 1182
Registriert: 08.09.2004 08:53

Re: Modul: Automatischer Image upload zu ImgBB.com

Beitrag von dige »

Danke! :allright:
"Papa, mein Wecker funktioniert nicht! Der weckert immer zu früh."
Benutzeravatar
Kurzer
Beiträge: 1614
Registriert: 25.04.2006 17:29
Wohnort: Nähe Hamburg

Re: Modul: Automatischer Image upload zu ImgBB.com

Beitrag von Kurzer »

Vielen Dank für Euer feedback. :allright:

Ich habe gerade noch einen kleinen Fehler behoben. Der Code im ersten Post wurde aktualisiert.

Changelog:

Code: Alles auswählen

;* 1.01 - rel 01.05.2019: 
;*        fix - A closeFile() command was missing in the error handling (in line 174)
"Never run a changing system!" | "Unterhalten sich zwei Alleinunterhalter... Paradox, oder?"
PB 6.02 x64, OS: Win 7 Pro x64 & Win 11 x64, Desktopscaling: 125%, CPU: I7 6500, RAM: 16 GB, GPU: Intel Graphics HD 520
Useralter in 2023: 56 Jahre.
Antworten