Source code for pyforms_web.controls.control_image

from pyforms_web.controls.control_base import ControlBase

try:
	import cv2
except:
	print('no cv2 installed')
import base64
import numpy as np 
from io import StringIO
from PIL import Image
import simplejson


[docs]class ControlImage(ControlBase): def __init__(self, *args, **kwargs): self._filename super(ControlImage, self).__init__(*args, **kwargs) def init_form(self): return "new ControlImage('{0}', {1})".format( self._name, simplejson.dumps(self.serialize()) )
[docs] def save(self, data): if self.value!=None: data['value'] = self._value
[docs] def load(self, data): if 'value' in data: self.value = data['value']
[docs] def repaint(self): pass
@property def value(self): return ControlBase.value.fget(self) @value.setter def value(self, value): if self._value!=value: self.mark_to_update_client() self.changed_event() if len(value)==0: self._value = '' elif isinstance(value, np.ndarray): self._value = value elif isinstance( value, (str, str) ): self._value = cv2.imread(value) def serialize(self): data = ControlBase.serialize(self) image = self.value if isinstance(image, np.ndarray): if len(image.shape)>2: image = cv2.cvtColor(image,cv2.COLOR_BGR2RGB) image = Image.fromarray(image) buff = StringIO.StringIO() image.save(buff, format="PNG") content = buff.getvalue() buff.close() data.update({ 'base64content': base64.b64encode(content) }) data.update({ 'filename': self._filename }) return data def deserialize(self, properties): ControlBase.deserialize(self, properties) self._filename = properties['filename'] self.value = self._filename