예제 #1
0
    public static void HandleTextLayer(
        ref List <PSDLayerData> dataLayers,
        ref PsdLayerExtractor extractor,
        ref FileStream psdFileStream,
        PsdLayerExtractor.Layer layer,
        string prePath,
        PsdLayerCommandParser.ControlParser pa)
    {
        // track the dims and imported asset filepath
        var layerData = new PSDLayerData();

        layerData.type       = 1;
        layerData.dimensions = new Vector4(pa.area.left, pa.area.top, pa.area.width, pa.area.height);
        layerData.text       = layer.text;
        layerData.name       = layer.name;

        //the data to the referenced list
        dataLayers.Add(layerData);
    }
예제 #2
0
    public static void HandleImageLayer(
        ref List <PSDLayerData> dataLayers,
        ref PsdLayerExtractor extractor,
        ref FileStream psdFileStream,
        PsdLayerExtractor.Layer layer,
        string prePath,
        PsdLayerCommandParser.ControlParser pa)
    {
        var fileName = pa.fullName;

        //exit if file name is bad
        if (extractor.HasUnacceptibleChar(fileName))
        {
            Debug.LogError(fileName + " Contains wrong character '\\ / : * ? \" < > |' not allowed");
            return;
        }

        //read the image from the file stream
        var filePath = prePath + "/" + fileName + ".png";

        PsdLayerExtractor.ImageFilePath newImageFilePath = null;
        {
            try
            {
                psdFileStream.Position = 0;
                var br = new BinaryReader(psdFileStream);
                {
                    layer.LoadData(br, extractor.Psd.headerInfo.bpp);
                    newImageFilePath = new PsdLayerExtractor.ImageFilePath(filePath, "pass");
                }
            }
            catch (System.Exception e)
            {
                Debug.LogError(e.Message);
            }
        }

        //merge channels and check if successful
        var data = layer.psdLayer.mergeChannels();

        if (data == null)
        {
            return;
        }

        //create the texture
        Texture tex = null;

        if (pa.sliceArea != null)
        {
            tex = extractor.MakeSlicedSprites(ref data, layer, pa.sliceArea);
        }
        else
        {
            tex = extractor.MakeTexture(ref data, layer);
        }

        if (tex != null)
        {
            if (!System.IO.Directory.Exists(prePath))
            {
                System.IO.Directory.CreateDirectory(prePath);
            }

            //import the texture to the asset database
            System.IO.File.WriteAllBytes(filePath, data);
            AssetDatabase.Refresh();
            TextureImporter importer = AssetImporter.GetAtPath(filePath) as TextureImporter;
            ProcessTexture2D(importer, ResolutionOptions.NEXT_SMALLEST, true, false, Platform.iPhone_Android);

            // track the dims and imported asset filepath
            var layerData = new PSDLayerData();
            layerData.type         = 0;
            layerData.dimensions   = new Vector4(pa.area.left, pa.area.top, pa.area.width, pa.area.height);
            layerData.texture_path = filePath;
            layerData.name         = layer.name;

            //the data to the referenced list
            dataLayers.Add(layerData);

            //destroy the temp texture
            Texture2D.DestroyImmediate(tex);
        }
    }