123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189 |
- # coding=utf-8
- from PIL import Image
- from django.db import models
- from django.conf import settings
- from django.utils import timezone
- from utils.file_operation import UploadFile, DeleteFile, DownloadFace
- class ImagesManager(models.Manager):
- def employee_addnew(self, employee, type, file):
- return self._addnew(employee.user, type, file)
- def customer_addnew(self, customer, type, file):
- return self._addnew(customer.user, type, file)
- def _addnew(self, user, type, file):
- width = None
- height = None
- path = ImagesManager.calculatePath(type, user.id)
- modify_size = ImagesManager.canModifySize(type)
- filename = UploadFile(file, path)
- fullname = "%s/%s" % (settings.MEDIA_ROOT, filename)
- try:
- img = Image.open(fullname)
- width, height = img.size
- # 缩略图压缩宽或高最大200
- if modify_size and (width > 200 or height > 200):
- if width > height:
- size = (200, int(height * 200 / width))
- elif width < height:
- size = (int(width * 200 / height), 200)
- else:
- size = (200, 200)
- img = img.resize(size, Image.ANTIALIAS)
- img.save(fullname)
- width, height = img.size
- except:
- pass
- instance = self.model(
- user=user,
- type=type,
- name=file.name,
- picture=filename,
- width=width,
- height=height,
- create_time=timezone.now()
- )
- instance.save()
- return instance
- @staticmethod
- def calculatePath(type, user_id):
- path_map = {
- Images.PACKAGE_FILE: package_detail_file,
- Images.PACKAGE_THUMBNAIL_FILE: package_thumbnail_file,
- Images.PACKAGE_PLAYBILL_FILE: package_playbill_file,
- Images.POSTER_FILE: poster_file,
- Images.SALES_ADVISOR_FACE: sales_advisor_face_file,
- Images.SALES_ADVISOR_CODE: sales_advisor_code_file,
- Images.SHOP_FILE: shop_file,
- Images.VEHICLE_SERIES_THUMBNAIL: vehicle_series_thumbnail_file,
- Images.VEHICLE_MODEL_THUMBNAIL: vehicle_model_thumbnail_file,
- Images.VEHICLE_MODEL_PLAYBILL: vehicle_model_playbill_file,
- Images.VEHICLE_IMAGES: vehicle_model_detail_file,
- Images.VEHICLE_MODEL_IMAGES: vehicle_detail_file,
- Images.CUSTOMER_FACE: customer_face_file,
- Images.ACTIVITY_PLAYBILL_FILE: activity_playbill_file,
- }
- return path_map[type] + str(user_id) + '/'
- @staticmethod
- def canModifySize(type):
- modify_size = False
- can_modify_list = [
- Images.PACKAGE_THUMBNAIL_FILE,
- Images.SALES_ADVISOR_FACE,
- Images.SALES_ADVISOR_CODE,
- Images.SHOP_FILE,
- Images.VEHICLE_SERIES_THUMBNAIL,
- Images.VEHICLE_MODEL_THUMBNAIL,
- ]
- if type in can_modify_list:
- modify_size = True
- return modify_size
- package_detail_file = "package/detail/"
- package_thumbnail_file = "package/thumbnail/"
- package_playbill_file = "package/playbill/"
- poster_file = 'poster/'
- sales_advisor_face_file = "sales_advisor/face/"
- sales_advisor_code_file = "sales_advisor/code/"
- shop_file = "shop/"
- vehicle_series_thumbnail_file = 'vehicle_series/'
- vehicle_model_thumbnail_file = 'vehicle_model/thumbnail/'
- vehicle_model_playbill_file = 'vehicle_model/playbill/'
- vehicle_model_detail_file = 'vehicle_model/detail/'
- vehicle_detail_file = 'vehicle/detail/'
- customer_face_file = 'customer/face/'
- activity_playbill_file = 'activity/playbill/'
- class Images(models.Model):
- PACKAGE_FILE = 1
- PACKAGE_THUMBNAIL_FILE = 2
- PACKAGE_PLAYBILL_FILE = 3
- POSTER_FILE = 4
- SALES_ADVISOR_FACE = 5
- SALES_ADVISOR_CODE = 6
- SHOP_FILE = 7
- VEHICLE_SERIES_THUMBNAIL = 8
- VEHICLE_MODEL_THUMBNAIL = 9
- VEHICLE_MODEL_PLAYBILL = 10
- VEHICLE_IMAGES = 11
- VEHICLE_MODEL_IMAGES = 12
- CUSTOMER_FACE = 13
- ACTIVITY_PLAYBILL_FILE= 14
- TYPE_CHOICES = (
- (PACKAGE_FILE, u'商品图片'),
- (PACKAGE_THUMBNAIL_FILE, u'商品缩略图'),
- (PACKAGE_PLAYBILL_FILE, u'商品海报'),
- (POSTER_FILE, u'广告图片'),
- (SALES_ADVISOR_FACE, u'销售顾问头像'),
- (SALES_ADVISOR_CODE, u'销售顾问二维码'),
- (SHOP_FILE, u'门店图片'),
- (VEHICLE_SERIES_THUMBNAIL, u'车系缩略图'),
- (VEHICLE_MODEL_THUMBNAIL, u'车型缩略图'),
- (VEHICLE_MODEL_PLAYBILL, u'车型海报'),
- (VEHICLE_IMAGES, u'整车图片'),
- (VEHICLE_MODEL_IMAGES, u'车型图片'),
- (CUSTOMER_FACE, u'客户头像'),
- (ACTIVITY_PLAYBILL_FILE, u'活动封面'),
- )
- user = models.ForeignKey(settings.AUTH_USER_MODEL, verbose_name=u'操作人', on_delete=models.PROTECT)
- type = models.PositiveSmallIntegerField(choices=TYPE_CHOICES, verbose_name=u"类型")
- name = models.CharField(verbose_name=u'图片名', max_length=250)
- picture = models.CharField(verbose_name=u'图片路径', max_length=250)
- width = models.IntegerField(verbose_name=u"图片宽度")
- height = models.IntegerField(verbose_name=u"图片高度")
- create_time = models.DateTimeField(verbose_name=u'上传时间', default=timezone.now, editable=False)
- objects = ImagesManager()
- class Meta:
- db_table = "images"
- verbose_name = u'图片'
- ordering = ['-create_time']
- index_together = (
- 'type',
- 'create_time',
- )
- default_permissions = ()
- def del_images(self):
- picture = self.picture
- self.delete()
- DeleteFile(picture)
- def get_path(self):
- return '%s%s%s' % (settings.SERVER_DOMAIN, settings.MEDIA_URL, self.picture)
- @staticmethod
- def downLoadFace(customer, url):
- save_path = customer_face_file + str(customer.user.id) + '/'
- filename = DownloadFace(url, save_path, 'jpg')
- name = filename.split('/')[-1]
- fullname = "%s/%s" % (settings.MEDIA_ROOT, filename)
- width = None
- height = None
- try:
- img = Image.open(fullname)
- width, height = img.size
- except:
- pass
- instance = Images.objects.create(
- tenant=customer.tenant, user=customer.user, type=Images.CUSTOMER_FACE, name=name, picture=filename,
- width=width, height=height, create_time=timezone.now()
- )
- instance.save()
- return instance
|